В настоящее время всё больше сайтов переходит на протокол HTTPS. Большинство крупных проектов уже давно работают используя HTTPS, небольшие проекты всё чаще находят силы для переезда на безопасный протокол. Google официально заявил, что безопасность пользователей должно быть приоритетным для компаний, которые имеют своё представительство в сети Интернет. Более того, Google будет давать бонус при ранжировании сайтов для проектов которые работают по HTTPS.

Как получить и настроить бесплатный SSL-сертификат

 

Что дает HTTPS:

— обеспечивает безопасность при обмене данными между устройствами и сайтами пользователя
— повышает репутацию сайта
— бонус при ранжировании
— указание о надёжности сайта в браузерах

С преимуществами мы разобрались. Что бы обеспечить работу сайта по HTTPS-протоколу необходимо иметь SSL-сертификат. Есть несколько типов SSL-сертификатов: DV, OV, EV. Они различаются по уровню безопасности и цене соответственно. DV(Domain Validated) - проверен домен. OV(Organization Validated) - проверена организация. EV(Extended Validation SSL) - расширенная проверка организации.

Для крупных компаний необходимо иметь SSL-сертификат OV или EV, для личных сайтов, блогов, небольших компаний достаточно владеть сертификатом DV. Все сертификаты платные, но есть компании, которые предоставляют DV сертификат бесплатно. Чтобы его получить и настроить нужно иметь доступ к серверу.

Далее мы рассмотрим последовательность действий для получения и настройки SSL-сертификата на своём сервере. А получать мы его будем в центре сертификации Let's Encrypt.

 

Установка клиента CertBot, который поможет получить сертификат:

$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
$ ./certbot-auto certonly --authenticator manual

После скачки и установки прав клиента, мы его запускаем. Далее необходимо ввести свой домен для которого, вы желаете получить сертификат:

Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel):

После ввода домена система потребует у вас разрешения на публичный запрос сертификата, если вы имеете доступ к серверу. Отвечаем положительно (y):

NOTE: The IP of this machine will be publicly logged as having requested this certificate. If you're running certbot in manual mode on a machine that is not your server, please ensure you're okay with that. Are you OK with your IP being logged?

 

Далее система выдаст вам инструкцию как подтвердить домен, для завершения получения сертификата. Для этого есть два способа:

— создать файл, который будет доступен по указанному адресу с указанным набором символов
— выполнить указанные команды на сервере, если у вас нет возможности осуществить описанное в первом пункте

Make sure your web server displays the following content at http://[ваш_домен]/.well-known/acme-challenge/[название файла] before continuing: [набор символов]

После создания файла и записи в него указанного набора символов, он должен быть доступен по вышеуказанному адресу: http://[ваш_сайт]/.well-known/acme-challenge/[название файла]

Если у вас это удалось, то можно идти дальше… жмём Enter.

Система проверит подтверждающий файл и если вы всё сделали верно, то будет получен сертификат и вы увидете радостную новость о том, что всё готово:

- Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/[ваш домен]/fullchain.pem.

 

Сертификат получен и находится в директории /etc/letsencrypt/live/[ваш домен], теперь вы можете настроить свой веб-сервер.

Для получения большей безопасности и получения в итоге рейтинга "А+" можно создать ключ по алгоритму Диффи — Хеллмана:

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

 

Ниже я приведу пример настройки веб-сервера:

Для NGINX:

Устанавливаем такие настройки в файле конфигурации:

listen 443 ssl;

server_name [ваш домен];

ssl_certificate /etc/letsencrypt/live/[ваш домен]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[ваш домен]/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;

После основной конфигурации сделайте редирект с 80 порта, если требуется:

server {
listen 80;
server_name [ваш домен] www.[ваш домен];
return 301 https://[ваш домен]$request_uri;
}

server {
listen 443 ssl;
server_name www.[ваш домен];
return 301 https://[ваш домен]$request_uri;
}

После чего перезапускаем NGINX:

$ /etc/init.d/nginx restart

Если всё прошло успешно, то пробуем открыть https://[ваш домен] и должно уже всё работать.

 

Для Apache:

Устанавливаем такие настройки в файле конфигурации:

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/[ваш домен]/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[ваш домен]m/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/[ваш домен]/chain.pem

После чего перезапускаем Apache.

После завершения обязательно проверьте свой сертификат, например при помощи сервиса ssllabs: https://www.ssllabs.com/ssltest/analyze.html