После того, как сайт sslforfree.com обновился, многие стали чесать репу по поводу того, где же теперь брать TLS (SSL) сертификаты без оплаты. Сервис предлагает использовать 90 дней сертификат без оплаты, но затем нужно платить деньги, чтобы продлить сертификат и/или выпустить другие (более 3-х).
Как я писал ранее, поосторожнее с certbot...
Благодаря Вадиму Макееву, который все объяснил по полочкам, теперь Вы сможете получать сертификаты полу-автоматически и без оплаты (и даже после 3-х месяцев — тоже без оплаты!).
Вот, что Вам необходимо сделать:
- Установить nginx. А, если он уже у Вас был установлен, Вам НЕ придется ничего переустанавливать.
- Если уже установлен, то нужно остановить nginx!
- Выполнить команду:
apt-add-repository -y ppa:hda-me/nginx-stable
- Далее:
apt-get install software-properties-common
- Также:
add-apt-repository ppa:certbot/certbot
-
apt-get update
-
apt-get install python-certbot-nginx
-
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
- Создайте файл
/etc/nginx/snippets/ssl-params.conf
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1h;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK;
#add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on; - Выполнив команду:
certbot --nginx certonly
мы получаем список всех доменов и поддоменов, которые доступны на нашем сервере и можем выбрать для каких именно мы хотим создать TLS-сертификаты. Вводим ТОЛЬКО номер домена, на который необходимо поставить TLS. Например, нам выдаст что-то типа:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
чтобы выбрать ТОЛЬКО
Plugins selected: Authenticator nginx, Installer nginx
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: lawyer.com.ua
2: www.lawyer.com.ua
3: dev4.later.pro
4: www.dev4.later.pro
5: order.later.pro
6: shop.later.pro
7: www.shop.later.pro
8: file.prod.org
9: www.file.prod.org
10: smile.prod.org
11: www.smile.prod.org
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave inputsmile.prod.org
иfile.prod.org
, нужно ввести8
ПРОБЕЛ10
.
У меня почему-то не хочет создавать сертификаты для двух и более доменов одновременно, поэтому я сначала создаю для одного (например, 8), затем для следующего (например, 10), выполняя каждый раз командуcertbot --nginx certonly
. - Успешное сообщение:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.site.pro/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.site.pro/privkey.pem
Your cert will expire on 2021-06-23. 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"
- 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 - После этого, безусловно, старые настройки сертификатов нужно заменить на новые, в настройках самого домена, например:
/etc/nginx/sites-available/file.prod.org.conf
:
ЗАМЕНИТЬ ЭТО (старые пути к файлам сертификата):ssl_certificate /etc/nginx/cert/file/certificate.crt;
НА:
ssl_certificate_key /etc/nginx/cert/file/private.key;
ssl_dhparam /etc/nginx/cert/file/dhparam.pem;ssl_certificate /etc/letsencrypt/live/file.prod.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/file.prod.org/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/file.prod.org/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;После этого, мой nginx отказался напрочь перезапускаться. Произошла какая-то магия, которая не давала мне: 1) убить сам процесс стандартным способом, 2) перезапустить/остановить nginx. Пришлось выполнить что-то из этого, что именно помогло я не знаю:
/etc/init.d/nginx stop
lsof -i | grep nginx
гуглите:
https://stackoverflow.com/questions/8857358/nginx-daemon-stop-is-failing
https://stackoverflow.com/questions/18576845/how-to-kill-this-immortal-nginx-worker - При возникновении ошибки, введите:
systemctl status nginx.service
- Должно что-то подсказать:
nginx.service: Failed with result 'exit-
Mar 25 20:43:10 client systemd[1]: Failed to start nginx - high performance
lines 1-13/13 (END)...skipping...
● nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2021-03-25 20:43:10 EET; 12s ago
Docs: http://nginx.org/en/docs/
Process: 22398 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)
Mar 25 20:43:10 client systemd[1]: Starting nginx - high performance web server...
Mar 25 20:43:10 client nginx[22398]: nginx: [warn] duplicate MIME type "woff2" in /etc/nginx/nginx.conf:129
Mar 25 20:43:10 client nginx[22398]: nginx: [warn] duplicate MIME type "text/html" in /etc/nginx/nginx.conf:129
Mar 25 20:43:10 client nginx[22398]: nginx: [emerg] cannot load certificate "/etc/letsencrypt/live/site.pro/fullchain.pem": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or dir
Mar 25 20:43:10 client systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Mar 25 20:43:10 client systemd[1]: nginx.service: Failed with result 'exit-code'.
Mar 25 20:43:10 client systemd[1]: Failed to start nginx - high performance web server. - Бывает, что на сервере установлен также apache, и он занимает
80
-тый порт. Чтобы проверить, что занимает 80 порт (стандартный порт для www), нужно выполнить:
netstat -tulpn | grep :80
- Тестим nginx:
nginx -t
- Должно быть все ok. Запускаем:
service nginx start
- Также можно использовать
webroot
команду, чтобы проверить действительно ли требуемый сайт лежит на Вашем сервере. Это особенно полезно для новых сайтов и для тех случаев, когда проверочный бот не может достучаться до конкретного ресурса.certbot certonly --webroot -w /var/www/html/site.pro -d www.site.pro -d site.pro
где /var/www/html/site.pro — путь к каталогу, где расположен сайт
www.site.pro и site.pro — доменное имя. - Можно проверить сайт на TLS.
- Результат: