Получение бесплатного SSL сертификата Lets Encrypt
Определённое время назад появилась инициатива по переходу всех веб-коммуникаций на использование протокола HTTPS. В связи с этим при поддержке многих ведущих вендоров была запущена служба по выдаче бесплатных SSL-сертификатов Let's Encrypt.
Вслед за этим появилось желание протестировать данную услугу. Способов её получения - масса.
Я решил попробовать стандартный и рекомендуемый всем желающим, а именно - применить certbot.
На тестовом стенде всё получилось просто и элементарно:
pkg install py27-certbot
и я решил проделать то же самое на боевом сервере под управлением FreeBSD 9 версии.
Само собой на боевом сервере уже был установлен питон и после "успешного" выполнения вышеуказанной команды - попытка получить сертификат
certbot certonly --standalone -d example.com -d www.example.com
сообщала, что у меня в системе установлена старая (0.9.8) версия openssl. Обновление python с версии 2.7.3 до версии 2.7.12 к успеху не привело.
Пришлось всё удалить
pkg delete python27
установить свежую версию openssl в систему
pkg install openssl
и дальше собрать certbot из портов
cd /usr/ports/security/py-certbot make install clean
Но certbot (по-русски сукеище, очень соответствует) упорно не хотел собираться, периодически выпадая с ошибкой сборки. Пришлось потратить какое-то время на ручную сборку и установку питона и всех зависимостей, которые выпадали с ошибкой not found. В итоге пришлось сделать всё указанное:
cd /usr/ports/lang/python27 make install clean cd /usr/ports/devel/py-cffi make clean make install clean cd /usr/ports/security/py-cryptography/ make clean make install clean cd /usr/ports/devel/py-pyasn1 make clean make install clean cd /usr/ports/dns/py-idna make clean make install clean cd /usr/ports/net/py-ipaddress make clean make install clean cd /usr/ports/devel/py-enum34 make clean make install clean cd /usr/ports/net/py-ndg_httpsclient make clean make install clean cd /usr/ports/www/py-requests make clean make install clean cd /usr/ports/www/py-werkzeug make clean make install clean cd /usr/ports/devel/py-zope.event make clean make install clean cd /usr/ports/devel/py-pbr make clean make install clean cd /usr/ports/devel/py-funcsigs make clean make install clean cd /usr/ports/security/py-certbot make install clean
После этого наконец-то был получен рабочий certbot. Но после запуска он вначале выругался по-поводу работающего веб-сервера, пришлось остановить Apache, а потом на недоступность по HTTPS: потребовалось отркыть 443 порт для доступа снаружи (хотел сделать это уже после настройки, но пришлось делать раньше).
Ключи были сгенерированы по пути: /usr/local/etc/letsencrypt/live/example.com/
После этого осталось только прописать соответствующий VirtualHost:
Listen 443 <virtualhost> DocumentRoot "/home/site/public_html" ServerName example.com ServerAlias www.example.com ErrorLog "/home/site/logs/error.log" CustomLog "/home/site/logs/access.log" combined php_admin_value open_basedir "/home/site:." php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f noreply@example.com" php_admin_value upload_tmp_dir "/home/site/upload" SSLEngine on SSLCertificateFile /usr/local/etc/letsencrypt/live/example.com/cert.pem SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /usr/local/etc/letsencrypt/live/example.com/chain.pem </virtualhost>