Размещаем сайт на VPS с нуля. Часть 7. Получаем SSL: не очевидная проблема.

В настоящее время сайты массово переходят на протокол https. HTTPS (аббр. от англ. HyperText Transfer Protocol Secure) — расширение протокола HTTP для поддержки шифрования в целях повышения безопасности. Данные в протоколе HTTPS передаются поверх криптографических протоколов SSL или TLS. В отличие от HTTP с TCP-портом 80, для HTTPS по умолчанию используется TCP-порт 443.

Если сайт не использует HTTPS, то современный браузер выдаёт сообщение «подключение к сайту не защищено». Кроме то в кабинете вебмастера нам будут настойчиво использовать шифрование. Для использования HTTP нам понадобится SSL-сертификат. Сертификат можно купить (оплата ежегодная) или взять свободно предоставляемый от компании https://letsencrypt.org/.

Мы воспользуемся вторым вариантом. Нам понадобится certbot. В Debian 9 он уже должен быть в репозиториях, а значит соединяемся с нашим сервером по putty и вводим команду:

apt-get install certbot

После установки бота получим сертификат на домен virtuatouch.ru командой (соответственно домен virtuatouch.ru меняется на ваш)

certbot certonly —webroot -w /var/www/virtuatouch.ru -d virtuatouch.ru -d virtuatouch.ru

у нас запросят e-mail и… всё это может закончиться былинным отказом. А дело в правилах ЧПУ, которые мы прописывали в 6-й часте.

У меня бот заработал только после того, как открыл lighttpd.conf — nano /etc/lighttpd/lighttpd.conf и убрал правила, удалил этот блок:

$HTTP[“host”] =~ “virtuatouch.ru” {
url.rewrite-final = (
# Exclude directories
“^/(wp-admin|wp-includes|wp-content)/(.*)” => “$0”,
# Exclude root php files
“^/(.*.php)” => “$0”,
# Handle permalinks and feeds
“^/(.*)$” => “/index.php/$1”
)
}

Перезапустил lightttpd командой systemctl restart lighttpd после чего снова запустил

apt-get install certbot

Всё прошло хорошо и в папке /etc/letsencrypt/live/virtuatouch.ru появились файлы сертификатов. Однако к этому каталогу мы должны предоставить доступ для lightttpd. Пропишем следующие команды:

chown :www-data /etc/letsencrypt
chown :www-data /etc/letsencrypt/live
chmod g+x /etc/letsencrypt
chmod g+x /etc/letsencrypt/live

ighttpd требует, чтобы сертификат и закрытый ключ были в одном файле. Стало быть их нужно объединить командой:

cat /etc/letsencrypt/live/virtuatouch.ru/privkey.pem /etc/letsencrypt/live/virtuatouch.ru/cert.pem > /etc/letsencrypt/live/virtuatouch.ru/merged.pem

Файлы privkey.pem и cert.pem будут объединены и сохранены как merged.pem.

Возвращаемся к редактированию конфигурационного файла lighttpd.conf

nano /etc/lighttpd/lighttpd.conf

прописываем

$SERVER[«socket»] == «:443» {
ssl.engine = «enable»
ssl.ca-file = «/etc/letsencrypt/live/virtuatouch.ru/chain.pem»
ssl.pemfile = «/etc/letsencrypt/live/virtuatouch.ru/merged.pem»

$HTTP[«host»] == «virtuatouch.ru» {
ssl.ca-file = «/etc/letsencrypt/live/virtuatouch.ru/chain.pem»
ssl.pemfile = «/etc/letsencrypt/live/virtuatouch.ru/merged.pem»
}

}

Опционально можно задать принудительное использование HTTPS.

$HTTP[«scheme»] == «http» {
$HTTP[«host»] =~ «.*» {
url.redirect = («.*» => «https://%0$0»)
}
}

Можно также вернуть наши правила для ЧПУ ссылок для WordPress. !Да решение ну очень «не промышленное», но иного я пока что не нашёл. Как найду — обязательно напишу, или напишите Вы в комментариях!. 

Сохраняем файл и перезапускаем lightttpd.

systemctl restart lighttpd

Сертификат выдаётся на 90 дней! После чего, где-то за неделю, нужно обновление. Это осуществляется командой:

certbot renew

После чего вновь используем команду:

cat /etc/letsencrypt/live/virtuatouch.ru/privkey.pem /etc/letsencrypt/live/virtuatouch.ru/cert.pem > /etc/letsencrypt/live/virtuatouch.ru/merged.pem

По большому счету надо бы обновления сертификатов автоматизировать, используя crontab. Но из-за конфликта с правила для ЧПУ-ссылок WordPress пока оставляю так.

 

Поделиться ссылкой:

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

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