Проект py-letsencrypt, SSL/TLS, Apache, FreeBSD, установка настройка
13.02.2016 Сайт https://anteh.ru
20.10.2016 при попытке обновления сертификатов, выяснилось, что клиент py27-letsencypt заменён на py27-certbot и обновление сертификатов letsencrypt делаем так.
Проект letsencrypt, даёт возможность свободно получить SSL/TLS сертификаты. Цель сделать шифрованное соединение максимально доступным. Проект развивается. На FreeBSD cтавится клиент letsencrypt, ему нужны 80 и 443 порты. Через него запрашиваются и скачиваются сертификаты для указанных доменов. Пока сертификаты ставим в ручную, но в будующем letsencrypt обещает процесс полностью автоматизировать.
# cd /usr/ports/security/py-letsencrypt
# make
...
Copying letsencrypt.egg-info to /usr/ports/security/py-letsencrypt/work/stage/usr/local/lib/python2.7/site-packages/letsencrypt-0.3.0-py2.7.egg-info
running install_scripts Installing letsencrypt script to /usr/ports/security/py-letsencrypt/work/stage/usr/local/bin Installing letsencrypt-renewer script to /usr/ports/security/py-letsencrypt/work/stage/usr/local/bin writing list of installed files to '/usr/ports/security/py-letsencrypt/work/.PLIST.pymodtmp' ====> Compressing man pages (compress-man)
#
|
# make install
===> Installing for py27-letsencrypt-0.3.0 ... ===========================================================================
The Let's Encrypt Client is BETA SOFTWARE. It contains plenty of bugs and rough edges, and should be tested thoroughly in staging environments before use on production systems.
This port installs the "standalone" Python client only, which does not use and is not the letsencrypt-auto bootstrap/wrapper script.
To obtain certificates, use use the 'certonly' command as follows:
# sudo letsencrypt --server <server-URL> certonly
Note: The client currently requires the ability to bind on TCP port 80. If you have a server running on this port, it will need to be temporarily stopped so that the standalone server can listen on that port to complete authentication.
The letsencrypt plugins to support apache and nginx certificate installation will be made available soon in the following ports:
* Apache plugin: security/py-letsencrypt-apache * Nginx plugin: security/py-letsencrypt-nginx
===========================================================================
|
Должен установиться letsencrypt клиетн, с помощью которого будет произведена аутоинтификация сервера, на котором запускается клиент, и можно получить сертификат. Клиент работает только на 80м порту, поэтому, перед запуском клиента, приостанавливаем сервер, если он работает на 80м. Далее сертификат устанавливаем вручную.
Смотрим что как:
# letsencrypt No installers are available on your OS yet; try running "letsencrypt-auto certonly" to get a cert you can install manually root@anteh:~ # letsencrypt '' usage: letsencrypt [SUBCOMMAND] [options] [-d domain] [-d domain] ...
The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By default, it will attempt to use a webserver both for obtaining and installing the cert. Major SUBCOMMANDS are:
(default) run Obtain & install a cert in your current webserver certonly Obtain cert, but do not install it (aka "auth") install Install a previously obtained cert in a server revoke Revoke a previously obtained certificate rollback Rollback server configuration changes made during install config_changes Show changes made to server config during installation plugins Display information about installed plugins letsencrypt: error: unrecognized arguments:
#
|
Освобождаем порт 80:
# apachectl stop
Пробрасываем и/или открываем порт 443
# letsencrypt certonly -d anteh.ru -d www.anteh.ru -d anteh.com -d www.anteh.com -d adc.anteh.ru -d www.adc.anteh.ru
Вводие email в диалоговое окно, далее, если 443 порт открыт, появится второе диалоговое окно с предложением ознакомиться с лицензией по адресу https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf
Если указывать несколько доменов, как было сделано выше, то получаем ошибку, нужно по одному, как показано ниже:
# letsencrypt certonly -d anteh.ru -d www.anteh.ru
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/anteh.ru/fullchain.pem. Your cert will expire on 2016-05-11. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
|
Далее получаем для anteh.com:
# letsencrypt certonly -d anteh.com -d www.anteh.com
И для adc.anteh.ru
# letsencrypt certonly -d adc.anteh.ru -d www.adc.anteh.ru
Запускаем Apache сервер.
Смотрим в указанную папку и видим обещанное
privkey.pem - private key
cert.pem - server cert only
chain.pem - intermediates
fullchain.pem - server cert + intermediates
Обновление сертификата:
Отключаем сервер или всё, что весит на 80м порту и:
Предыдущий, уже не рабочий способ 1:
# letsencrypt --renew certonly -d anteh.ru -d www.anteh.ru
# letsencrypt --renew certonly -d anteh.com -d www.anteh.com
Предыдущий, уже не рабочий способ 2:
На 28.07.2016 достаточно использовать 1 команду для обновления всего:
# letsencrypt renew
На 20.10.2016 обновление делается через py-certbot:
certbot certonly -d site.ru -d www.site.ru
Отвечаем на диалоговые запросы. Если возникли прблемы при обновлении, пробуем обновить все порты.
Сертификаты для доменов, описанных в .../letsencrypt/renewal/*.conf будут обновлены
Сертификаты обновлены, проверяем в браузере дату истечения действия сертификата. Через crontab можно автоматизировать процесс. Далее через https://www.ssllabs.com/ssltest/ проверяем что получилось.
Установка 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 месяца. На текущий момент 2 раза производилось обновление сертификата, работает.