Устанавливаем клиент Let’s Encrypt на сервер

Подключаемся к серверу по SSH. И переходим, например, в домашнюю директорию:

cd /home/

В нее мы установим клиент Let’s Encrypt. Для этого нам понадобится git, если у вас на сервере уже установлен git, то просто выполните следующие команды:

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Если у вас не установлен git, то либо установите его следующей командой:

apt-get install git

Либо просто распакуйте zip архив из репозитория GitHub:

wget https://github.com/letsencrypt/letsencrypt/archive/master.zip
unzip master.zip
mv letsencrypt-master letsencrypt
cd letsencrypt

Проверяем:

./letsencrypt-auto --help

В ответ вы увидите следующие:

Все, клиент Let’s Encrypt установлен.

Создаем SSL сертификат для HTTPS протокола на сайт

Перейдем к созданию сертификата Let’s Encrypt. Для этого сначала необходимо остановить nginx:

service nginx stop

и запустить команду создания SSL сертификата:

./letsencrypt-auto certonly --standalone -d devreadwrite.com -d www.devreadwrite.com

В случае успешного создания сертификата для HTTPS протокола вы увидите примерно следующие

Не забудте поменять доменое имя devreadwrite.com на свое.

В процессе создания сертификата, вам предложат ввести e-mail, для важных сообщений и для восстановления ключа при необходимости. Далее нужно будет согласиться с лицензионным соглашением. Созданный SSL сертификат сертификат и вся цепочка сохранится по следующему пути:

/etc/letsencrypt/live/devreadwrite.com/

Файлы SSL сертификата

В /etc/letsencrypt/live/devreadwrite.com/ будут следующие файлы:

privkey.pem - приватный ключ для сертификата. В Apache он используется в директиве SSLCertificateKeyFile. В Nginx используется в директиве ssl_certificate_key.

cert.pem - сертификат сервера. Его требует директива Apache SSLCertificateFile.

chain.pem - связка всех сертификатов, которые обслуживаются браузером, за исключением cert.pem. Используется Apache SSLCertificateChainFile.

fullchain.pem - вся связка сертификатов (объединение chain.pem и cert.pem). Используется в Nginx для ssl_certificate.

Вот мы и получили сертификат. Не забудьте запустить Nginx:

service nginx start

Теперь мы можем подключить протокол HTTPS к сайту.

Настройка HTTPS (SSL/TLS) в Nginx

Откройте файл конфигурации Nginx для сайта (обычно это: /etc/nginx/vhosts/userName/) и добавьте следующие строки:

server {
    #...
    ssl on;
    ssl_certificate /etc/letsencrypt/live/devreadwrite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/devreadwrite.com/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
    ssl_prefer_server_ciphers on;
    listen server_ip:443 ssl;
    listen server_ip:80;
}

Далее необходимо перезапустить Nginx:

nginx service reload

или

nginx service restart

Nginx, 301 редирект с протокола http на https

server {

    #...

    # force https-redirects
        if ($scheme = http) {
        return 301 https://$server_name$request_uri;
    }
}

Настройка HTTPS (SSL/TLS) в Apache

Откройте файл конфигурации Apache для сайта (обычно это: /etc/apache2/vhosts/userName/) и добавьте следующие строки:

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem

В итоге получится что-то вроде:

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin #... webmaster@localhost
        DocumentRoot #... /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/devreadwrite.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/devreadwrite.com/privkey.pem

        #...
    </VirtualHost>
</IfModule>

Перезапускаем Apache:

service apache2 restart

301 редирект с протокола http на https в Apache

Добавьте следующий код в файл .htaccess вашего сайта:

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Еще ридиректы в Apache: 301 редирект на все случаи жизни с помощью .htaccess.

Дополнительно

Для того чтобы получить зеленый замочек в адресной строке, который будет указывать пользователю что сайт правильно работает по протоколу HTTPS, необходимо все пути к подключаемым файлам (картинкам, css, js, ...) поменять с http на https. Так же можно вместо http или https поставить два слеша (//). Например:

<link rel="stylesheet" type="text/css" href="http://devreadwrite.com/style.css" />

заменить на:

<link rel="stylesheet" type="text/css" href="//devreadwrite.com/style.css" />

В таком случае файл будет получен по тому же протаколу в каком был запрошен сайт, в нашем случае https. Или же указать протокол явно.

<link rel="stylesheet" type="text/css" href="https://devreadwrite.com/style.css" />

По такому же принципу можно делать и ссылке на сайте.

Как продлить сертификат

Сертификат выдается на 3 месяца, поэтому за несколько дней до окончания его необходимо продлить.

Для продления сертификата необходимо выполнить команду:

./letsencrypt-auto renew

Эту команду вы можете добавить в крон таб, для автоматического продления SSL сертификата.

Плюсы и минусы данного способа создания сертификата

Один и самый большой плюс данного способа - это создание сертификата без танцев с бубном. Существует множество других способов, но этот единственный, который заработал сразу.

Минус данного способа создания SSL сертификата заключается в том, что для создания сертификата необходимо остановит Nginx, следовательно сайты на Nginx во время создания сертификата не будут работать, это примерно 5-10 секунд (по крайней мере на моем сервере).

Результат

В результате мы получаем рабочий SSL сертификат и протокол HTTPS на сайте.