Бесплатный SSL-сертификат от Letsencrypt для Apache

При попытке установить сертификат, выяснилось, что клиент py27-letsencypt заменён на py27-certbot и теперь обновление сертификатов letsencrypt делаем так.

Проект letsencrypt, даёт возможность свободно получить SSL/TLS сертификаты. Цель сделать шифрованное соединение максимально доступным. Проект развивается. На FreeBSD cтавится клиент letsencrypt, ему нужны 80 и 443 порты. Через него запрашиваются и скачиваются сертификаты для указанных доменов. Пока сертификаты ставим в ручную, но в будующем letsencrypt обещает процесс полностью автоматизировать.

Устанавливаем certbot:

root@tst: cd /usr/ports/security/py-certbot
root@tst: make install clean

Запускаем:

root@tst: certbot certonly --agree-tos --email postmaster@tst-amo.pp.ua -d tst-amo.pp.ua

Увидим процесс, если выбираем пункт (1), то  – предварительно останавливаем вебсервер :

Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for tst-amo.pp.ua
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
 /usr/local/etc/letsencrypt/live/tst-amo.pp.ua/fullchain.pem. Your
 cert will expire on 2017-10-08. 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

Когда установка SSL сертификата Apache будет завершена, вы найдете созданные файлы сертификатов в папке /usr/local/etc/letsencrypt/live. В этой папке будут четыре файла (точнее ссылки на них):

cert.pem - ваш сертификат домена;
chain.pem - сертификат цепочки Let's Encrypt;
fullchain.pem - cert.pem и chain.pem вместе;
privkey.pem - секретный ключ вашего сертификата.

Вставляем сертификаты в Апач.

Теперь вы можете зайти на сайт по https. Чтобы проверить как работает SSL и правильно ли выполнена установка ssl сертификата на сайт, вы можете открыть в браузере такую ссылку:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest

Установка SSL/TLS сертификата на сервер для каждого из доменов

Пробрасываем, и/или открываем 80 443 порты в httpd-vhosts.conf, для нужных доменов прописываем:
#site.ru
<VirtualHost *:80>
    ServerName site.ru
    DocumentRoot «/site.ru/site.ru»
    Redirect permanent «/» «https://site.ru/»
</VirtualHost>
<VirtualHost *:80>
    ServerName www.site.ru
    DocumentRoot «/site.ru/site.ru»
    Redirect permanent «/» «https://site.ru/»
</VirtualHost>
<VirtualHost *:443>
    ServerName www.site.ru
    DocumentRoot «/site.ru/site.ru»
    Redirect permanent «/» «https://site.ru/»
    SSLCertificateFile /usr/local/etc/letsencrypt/live/site.ru/fullchain.pem
    SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/site.ru/privkey.pem
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
</VirtualHost>
<VirtualHost *:443>
    SecRuleEngine On
    ServerName site.ru
    ServerAlias www.site.ru
    ServerAdmin admin@site.ru
    DocumentRoot «/site.ru/site.ru»
    ErrorLog «/var/log/site.ru-error_log»
    CustomLog «/var/log/site.ru-customlog» combined
    SSLCertificateFile /usr/local/etc/letsencrypt/live/site.ru/fullchain.pem
    SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/site.ru/privkey.pem
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
…
</VirtualHost>

Производится редирект с 80 на 443 для всех запросов, также реализованна склейка www и не www как для http так идля https. Модуль mod_rewrite не иcпользуем, не рекомендуется, всегда есть альтернативы.

Сертификат выдаётся на 3 месяца, далее делаем обновление, или заранее настраиваем автообновление через скрипт + crontab. Обновление действует следующие 3 месяца.

Для проверки можно запустить скрипт

/usr/local/bin/certbot renew --dry-run

Если отработает нормально – ставим и задачу в cron, и перезагрузку Apache

crontab -e

31 1 8 * * /usr/home/svm/bin/certbot.sh
32 1 8 * * /usr/local/sbin/apachectl reload

Сам скрипт:

#!/bin/sh
/usr/local/bin/certbot renew
root@tst: certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /usr/local/etc/letsencrypt/renewal/tst-amo.pp.ua.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
 /usr/local/etc/letsencrypt/live/tst-amo.pp.ua/fullchain.pem (skipped)
No renewals were attempted.

Проверяем, например, на сайтах

https://www.sslshopper.com/
https://rus.gogetssl.com/check-ssl-installation/