Подготовка
mkdir /root/letsencrypt /var/www/letsencrypt cd /root/letsencrypt
Воспользуемся библиотекой acme_tiny. Вы можете использовать любую другую библиотеку
wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py
Генерируем ключ-идентификатор
openssl genrsa 4096 > /root/letsencrypt/account.key
Добавить в секцию server в настройках виртуального хоста в nginx
location /.well-known/acme-challenge/ { alias /var/www/letsencrypt/; try_files $uri =404; }
Тестирование
echo "test" >> /var/www/letsencrypt/test.txt
И проверяем отдачу в браузере
http://domain.com/.well-known/acme-challenge/test.txt
Создание закрытого ключа, запроса сертификата и создание самого сертификата
Генерируем закрытый ключ
openssl genrsa 4096 > /root/letsencrypt/domain.com.key
Создаём файл с настройками для сертификата, где укажем наш email, а также доменное имя
cat << EOF > /root/letsencrypt/domain.com.txt [req] default_bits = 4096 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [ dn ] C=RU emailAddress=info@domain.com CN = domain.com [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = domain.com DNS.2 = www.domain.com EOF
Создаём запрос
openssl req -new -sha256 -key /root/letsencrypt/domain.com.key \ -nodes -out /root/letsencrypt/domain.com.csr \ -config /root/letsencrypt/domain.com.txt
И запускаем загруженную нами библиотеку для получения сертификата
python acme_tiny.py --account-key /root/letsencrypt/account.key \ --csr /root/letsencrypt/domain.com.csr \ --acme-dir /var/www/letsencrypt/ > /root/letsencrypt/domain.com.crt
Скрипт обновления
Этот скрипт можно добавить в планировщик cron для атоматизации получения сертификата.
cat << EOF > renew_cert.sh #!/bin/bash python acme_tiny.py --account-key /root/letsencrypt/account.key \ --csr /root/letsencrypt/domain.com.csr \ --acme-dir /var/www/letsencrypt/ > /root/letsencrypt/domain.com.new || exit mv /root/letsencrypt/domain.com.new /root/letsencrypt/domain.com.crt service nginx reload EOF