Выпустим их, используя certbot из ppa.
Добавляем репозиторий с certbot:
# add-apt-repository ppa:certbot/certbot
В процессе будет задан вопрос из разряда действительно ли мы хотим добавить этот репозиторий. Нажимаем Enter и видим заветный ответ: OK.
Обновляем список доступных пакетов:
# apt-get update
Устанавливаем certbot:
# apt-get install certbot
Проверяем версию:
# certbot --version
Она должна быть не меньше 0.22.
Выпускаем Wildcard сертификат
Запускаем команду для выпуска сертификата и следуем её инструкции:
# certbot certonly --manual -d *.somedomain.ru --agree-tos --no-bootstrap --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
Вместо *.somedomain.ru нужно установить нужный домен с указанием *. в начале, что означает действительность домена для всех поддоменов.
Программа попросит:
- Указать email, на который будет отправляться письма, если возникнут проблемы с перевыпуском сертификата и замечания связанные с безопасностью.
- Ответить на вопрос хотим ли мы разрешить отправлять нам письма от имени сообщества, поддерживающего certbot, и партнёров Let’s Encrypt.
- Добавить в DNS TXT запись.
Убедитесь, что запись появилась в DNS, и смело нажимайте Enter. Конечный результат должен быть вот такой:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/somedomain.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/somedomain.ru/privkey.pem Your cert will expire on 2018-06-29. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Настройка поддомена в nginx
Если раньше не создавался ключ Diffie–Hellman, то создаём его:
# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Создаём snippet для nginx:
# nano /etc/nginx/snippets/ssl-params.conf
Вставляем в файл:
# from https://cipherli.st/ # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # Disable preloading HSTS for now. You can use the commented out header line that includes # the "preload" directive if you understand the implications. #add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains"; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; ssl_dhparam /etc/ssl/certs/dhparam.pem;
Теперь создадим snippet для сертификата домена:
# nano /etc/nginx/snippets/ssl-somedomain.ru.conf
Вставляем в файл:
ssl_certificate /etc/letsencrypt/live/somedomain.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/somedomain.ru/privkey.pem;
Конфигурируем поддомен sub для домена somedomain.ru в nginx:
# nano /etc/nginx/sites-available/ru.somedomain.sub
Вставляем в файл:
server { listen 80; listen [::]:80; server_name sub.somedomain.ru; access_log off; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; include snippets/ssl-somedomain.ru.conf; include snippets/ssl-params.conf; server_tokens off; keepalive_timeout 70; server_name sub.somedomain.ru; access_log /var/log/nginx/ru.somedomain.sub-access.log; error_log /var/log/nginx/ru.somedomain.sub-error.log; root /var/www/ru.somedomain.sub; location / { try_files $uri $uri/ /index.html =404; } }
Создаём символическую ссылку:
# ln -s /etc/nginx/sites-available/ru.somedomain.sub /etc/nginx/sites-enabled/
Перезапускаем nginx:
# systemctl reload nginx
Открываем в браузере http://sub.somedomain.ru и наслаждаемся результатом.
Автоматическое обновление сертификата
Создаём скрипт для автоматического обновления сертификата:
# mkdir -p /var/www/certbot
# nano /var/www/certbot/crontab.sh
Вставляем в него:
#!/bin/bash echo "===== {`date`} =====" >> /var/log/cb-renew.log /usr/bin/certbot renew >> /var/log/cb-renew.log echo "==========================================" >> /var/log/cb-renew.log /bin/systemctl reload nginx
Делаем его исполняемым:
# chmod +x /var/www/certbot/crontab.sh
Добавляем в crontab:
# crontab -e
Добавляем строку:
30 2 * * 1 /var/www/certbot/crontab.sh
Теперь проверяем наш сайт с помощью веб-инструментов:
https://www.ssllabs.com/ssltest
https://sitecheck.sucuri.net