Содержание
Бесплатный SSL сертификат (deprecated)
Let's Encrypt позволяет получить бесплатный SSL сертификат автоматически, без регистрации и СМС! Дело нескольких минут. И этот сертификат воспринимают все популярные браузеры!
- Сертификат без установки программ: https://www.sslforfree.com/
Установка необходимо ПО
cd ~ git clone https://github.com/letsencrypt/letsencrypt
Получение бесплатного SSL сертификата
cd letsencrypt ./letsencrypt-auto --agree-dev-preview --server https://acme-v01.api.letsencrypt.org/directory -a manual auth
При этом попросят ввести пароль, чтобы скрипт запустился с правами root.
Далее необходимо ввести все домены, на которые необходимо получить сертификаты, через пробел и/или запятую. Далее предложат записать в публичный лог о получении сертификата, соглашаемся.
После чего получим следующее сообщение:
Make sure your web server displays the following content at http://site.ru/.well-known/acme-challenge/abcdef-abcdef-abcdef before continuing: abcdef-abcdef-abcdef If you don't have HTTP server configured, you can run the following command on the target server (as root): mkdir -p /tmp/letsencrypt/public_html/.well-known/acme-challenge cd /tmp/letsencrypt/public_html printf "%s" abcdef-abcdef-abcdef > .well-known/acme-challenge/abcdef-abcdef-abcdef # run only once per server: $(command -v python2 || command -v python2.7 || command -v python2.6) -c "import BaseHTTPServer, SimpleHTTPServer; s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); s.serve_forever()"
Таким образом, для проверки необходимо создать файл .well-known/acme-challenge/abcdef-abcdef-abcdef
с содержимым abcdef-abcdef-abcdef
, который бы открывался по ссылке http://site.ru/.well-known/acme-challenge/abcdef-abcdef-abcdef
Проверяем, чтобы отдавались правильные заголовки и ответ:
curl --head http://site.ru/.well-known/acme-challenge/abcdef-abcdef-abcdef HTTP/1.1 200 OK curl http://site.ru/.well-known/acme-challenge/abcdef-abcdef-abcdef abcdef-abcdef-abcdef
После этого нажимаем Enter в программе получения сертификатов. Если ввести несколько сайтов, программа интерактивно предложит проделать те же самые шаги для остальных доменов.
На примере Apache, сразу после RewriteEngine on
вставляем:
# отдаем файлы для проверки Let's Encrypt сразу RewriteRule ^(\.well-known/.*) - [L]
- .htaccess
Allow from all Satisfy Any
- .htaccess
Header unset Content-Type
В случае успеха, получим сообщение об этом:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/site.ru/fullchain.pem. Your cert will expire on 2016-03-18. 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
Установка полученных сертификатов
Теперь необходимо прописать в настройки веб-сервера пути к сертификатам и сделать редирект на https.
Файл | Назначение | Apache | nginx |
---|---|---|---|
privkey.pem | приватный ключ для сертификата | SSLCertificateKeyFile | ssl_certificate_key |
cert.pem | сертификат сервера | SSLCertificateFile | |
chain.pem | сертификат цепочки (не обязательно) | SSLCertificateChainFile | |
fullchain.pem | соединение chain.pem и cert.pem | ssl_certificate |
Apache
Для активации SSL сертификатов 10.0.0.1
заменить на свой IP, и прописать в конфиге индейца:
- site.conf
<VirtualHost 10.0.0.1:80 10.0.0.1:443> SSLEngine on SSLCertificateFile /var/www/httpd-cert/vds/site.ru.crt SSLCertificateChainFile /var/www/httpd-cert/vds/site.ru.chain.crt SSLCertificateKeyFile /var/www/httpd-cert/vds/site.ru.key </VirtualHost>
Для редиректов с www и http на https:
- .htaccess
# 301 редирект с адресов с www на адреса без www RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC] RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L] # Редирект на HTTPS RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Nginx
- site.conf
server { listen 443; ssl on; ssl_certificate /etc/ssl/site.crt; ssl_certificate_key /etc/ssl/site.key; }
Продление сертификата
До просрочки будут приходить письма напоминания о необходимости продления сертификата такого рода:
Hello, Your certificate (or certificates) for the names listed below will expire in 0 days (on 25 Feb 17 17:21 +0000). Please make sure to renew your certificate before then, or visitors to your website will encounter errors. pushorigin.ru For any questions or support, please visit https://community.letsencrypt.org/. Unfortunately, we can't provide support by email. For details about when we send these emails, please visit https://letsencrypt.org/docs/expiration-emails/. In particular, note that this reminder email is still sent if you've obtained a slightly different certificate by adding or removing names. If you've replaced this certificate with a newer one that covers more or fewer names than the list above, you may be able to ignore this message. If you want to stop receiving all email from this address, click http://mandrillapp.com/track/unsub.php?u=... (Warning: this is a one-click action that cannot be undone) Regards, The Let's Encrypt Team
Само продление:
./letsencrypt-auto --server https://acme-v01.api.letsencrypt.org/directory -a manual auth service nginx reload
Надо не забыть перегрузить веб-сервер!
По материалам статьи.
Бесплатный Wildcard SSL сертификат (deprecated)
Нужно установить программы, как написано в статье Переводим сайт на бесплатный SSL сертификат:
cd ~ git clone https://github.com/letsencrypt/letsencrypt
Но для получения сертификата нужно использовать другой сервер:
./letsencrypt-auto --server https://acme-v02.api.letsencrypt.org/directory -a manual auth
Запущенный скрипт предложит ввести домены через запятую в виде *.site.ru
, для них всех будет создан wildcard сертификат.
Надо будет создать TXT запись в _acme-challenge.ваш-домен
.
Проверить можно так (через @
можно опционально указать нс-сервер):
dig TXT _acme-challenge.site.ru @нс-сервер
Автоматическое продление можно повесить на крон: letsencrypt-auto renew