acme_init
2.22 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
#!/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
}
OPENSSL=$(/usr/bin/env which openssl)
if [[ ! -x $OPENSSL ]] ; then
echo Cannot find openssl
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 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 \
-sha256 \
-key $ACMEDIR/site.key \
-subj "/CN=$PRIMARY_DOMAIN"
else
$OPENSSL req \
-new \
-sha256 \
-key $ACMEDIR/site.key \
-subj "/CN=$PRIMARY_DOMAIN" \
-reqexts SAN \
-config \
<(cat /etc/ssl/openssl.cnf \
<(sed -e 's/[[:space:],]\+/,DNS:/g' -e 's/^/[SAN]\nsubjectAltName=DNS:/' \
<(echo "$ALT_DOMAINS")))
fi \
> $ACMEDIR/site.csr
echo "`date` initialized" > $ACMEDIR/log.txt