acme_init
2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/env bash
# скрипт инициализирует папку ACMEDIR
# создаётся временный сертификат на 1 день
# подготавливаются необходимые ключи и файлы запросов
# проставляются права
set -e
CONFIGFILE=/etc/acme.conf
# считать настройку из конфига
function readconfig {
OPTION=$1
# test file
if [[ ! -f $CONFIGFILE ]] ; then
echo "Configuration file $CONFIGFILE not found!"
exit 1
fi
# read option
readconfig_return_value="$(cat $CONFIGFILE \
| grep -v "^[[:space:]]*#" \
| awk -F "=" '/'$OPTION'/ {print $2}' \
| sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' \
)"
# test option
if [[ -z "$readconfig_return_value" ]] ; then
echo "Option $OPTION not found in $CONFIGFILE!"
exit 1
fi
}
# теперь считываем конфиг
readconfig acme_dir
ACMEDIR=$readconfig_return_value
readconfig primary_domain
PRIMARY_DOMAIN=$readconfig_return_value
readconfig alt_domains
ALT_DOMAINS=$readconfig_return_value
# если файл уже есть, ничего не делаем
if [[ -f "$ACMEDIR/site.csr" ]]
then
(>&2 echo "Directory '$ACMEDIR' already exists")
exit 0
fi
# создаём путь
mkdir -p $ACMEDIR/challenges
# находим openssl
OPENSSL=$(/usr/bin/env which openssl)
if [[ ! -x $OPENSSL ]] ; then
echo Cannot find openssl
exit 1
fi
# вычисляем версию
OPENSSL_VERSION=$(${OPENSSL} version)
# для старых версий выбираем sha1
if [[ "OPENSSL_VERSION" < "OpenSSL 0.9.8" ]] ; then
OPT_DIGEST="-sha1"
else
OPT_DIGEST="-sha256"
fi
echo "Using ${OPT_DIGEST} digest."
# создаём необходимые сертификаты
$OPENSSL genrsa 4096 > $ACMEDIR/account.key
$OPENSSL genrsa 4096 > $ACMEDIR/site.key
$OPENSSL req \
-new \
-key $ACMEDIR/site.key \
-days 1 \
-nodes \
-x509 \
-subj "/CN=$PRIMARY_DOMAIN" \
-out $ACMEDIR/site.crt
# если нет дополнительных доменов
if [[ -z "$ALT_DOMAINS" ]]
then
$OPENSSL req \
-new \
$OPT_DIGEST \
-key $ACMEDIR/site.key \
-subj "/CN=$PRIMARY_DOMAIN"
else
cat /etc/ssl/openssl.cnf > $ACMEDIR/openssl.cnf
echo "[SAN]" >> $ACMEDIR/openssl.cnf
echo $ALT_DOMAINS | sed \
-e 's/[[:space:], ]\{1,\}/,DNS:/g' \
-e 's/^/subjectAltName=DNS:/' \
>> $ACMEDIR/openssl.cnf
$OPENSSL req \
-new \
$OPT_DIGEST \
-key $ACMEDIR/site.key \
-subj "/CN=$PRIMARY_DOMAIN" \
-reqexts SAN \
-config $ACMEDIR/openssl.cnf
fi \
> $ACMEDIR/site.csr
# пишем в лог
echo "`date` initialized" > $ACMEDIR/log.txt