Бесплатные SSL сертификаты для сайта

Гугл уже давно намекал, что сайты с сертификатами будут ранжироваться выше. А для нового проекта мне нужно поднять несколько СДЛ сайтов, которые в перспективе будут приносить поисковой трафик. Поэтому будем изыскивать способы получения бесплатного сертификата. рассмотрим два варианта получения бесплатного сертификата от CloudFlare и Let’s Encrypt.

Итак, первый вариант: CloudFlare.

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

cloudflare ssl switch on

задать правило (у меня выключено, почему — расскажу ниже)

cloudflare rewrite rules

и включить реврайты. Однако у меня они нормально не заработали, потому выключены.

cloudflare automatic https rewrites

на этом, в общем то, все.

Из проблем, как уже сказано выше, проблема с реврайтами, плюс нужно на сервере выполнить некоторые настройки. А в общем все работает на 80 порту и никаких тонких настроек и 443 порта этот вариант не требует.

Второй вариант: бесплатный сертификат на 90 дней от Let’s Encrypt.

Домашняя страница проекта и описание на Wiki не буду повторять их здесь. Настройку рассмотрим на примере любимой связки Nginx+php-fpm на Centos 7.

ставим официальный пакет

yum install -y certbot

и создаем сертификат

certbot certonly -a webroot --webroot-path=/home/www/meou.life -d meou.life -d www.meou.life

На первый запуск и создание нам потребуется принять соглашение и пару раз подтвердить свой выбор. Созданные сертификаты будут в /etc/letsencrypt/live/meou.life. Редактируем общий конфиг nginx для активации https и правильных реврайтов. Добавляем в /etc/nginx/nginx.conf

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name _;
 return 301 https://$host$request_uri;
}

и редактируем конфиг виртуального хоста

server {
 listen 443;
 ssl on;
 ssl_certificate /etc/letsencrypt/live/meou.life/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/meou.life/privkey.pem;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 server_name meou.life www.meou.life;
 root /home/www/meou.life;
 index index.php;
 if ($scheme = http) {
 return 301 https://$server_name$request_uri;
 }
 location = /favicon.ico {
 log_not_found off;
 access_log off;
 }
 location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }
 location / {
 try_files $uri $uri/ /index.php?$args;
 }
 location ~ \.php$ {
 try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass unix:/var/run/php-fpm.sock;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }
 location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
 expires max;
 log_not_found off;
 }
}

Тестируем и перезапускаем веб-сервер.

Однако! На этом сервере у меня не один сайт, и сертификаты для каждого разные. Но алгоритм работы таков, что заголовки host передаются сразу шифрованными, потому при переходе на ip сервера, у нас откроется дефолтный виртуальны хост с сертификатом. А нам это не надо. Да и в принципе, нехорошо, когда сайт открывается по IP. Решаем проблему. Предупреждаю сразу, решение достаточно костыльное и профи возможно будут плеваться и ругаться, но мне этого варианта достаточно.

Для начала нужно сгенерировать и подписать свой сертификат для хоста на айпи. Информация отсюда.

yum install mod_ssl openssl
# Генерация приватного ключа
openssl genrsa -out ca.key 1024

# Генерация запроса на сертификат CSR
openssl req -new -key ca.key -out ca.csr

# Генерация самоподписанного ключа
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Далее, опять редактируем основной конфиг Nginx и добавляем туда еще одну секцию

server {
 listen 443;
 ssl on;
 ssl_certificate /home/cert/default/ca.crt;
 ssl_certificate_key /home/cert/default/ca.key;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 server_name "" default;
 root /home/www/public;
 index index.php;
}

ВАЖНО! Директория должна существовать, а пути к сертификатам припишите свои.

Таким образом по ип у нас не будет открываться ничего ( код 403), а http на сервере не будет в принципе, и каждый сайт будет использовать свой сертификат.

В заключение стоит еще раз напомнить, что сертификат действует 90 дней, а продлить его можно с помощью того certbot заданием в cron. Есть мысль по этому поводу, но пока нет возможности протестировать.

Спасибо за внимание и удачи!

One Reply to “Бесплатные SSL сертификаты для сайта”

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *