Установка Let's Encrypt и перенос сертификатов TLS с существующего сервера Raspberry Pi
Чтобы иметь веб-сайт HTTPS, вы должны правильно установить сертификаты TLS. Let's Encrypt-один из немногих поставщиков бесплатных сертификатов TLS. Если вы хотите сохранить существующий веб-сайт в качестве веб-сайта HTTPS, необходимо переместить существующие сертификаты TLS с Raspberry Pi на веб-сервер x86. Это может быть самой сложной частью конфигурации сервера x86. Если вы сделаете что-то неправильно здесь, Lighttpd не будет работать.
Прежде чем делать что-либо в этом разделе, убедитесь, что Lighttpd работает :
sudo systemctl status lighttpd
Если Lighttpd не запущен, отладьте проблему, прежде чем вносить дальнейшие изменения в сервер x86.
Шаги для установки Let's Encrypt на вашем сервере x86 и переноса существующих сертификатов Let's Encrypt TLS с вашего Raspberry Pi следующие. Они должны быть сделаны в указанном порядке.
- Установите Certbot Let's Encrypt.
- Переместите существующие каталоги Let's Encrypt и сертификаты TLS на сервер x86.
- Когда срок действия сертификатов TLS истечет через 30 дней, выполните Certbot для их обновления.
Помните, что веб-серверы с разными дистрибутивами Linux требуют разных версий Certbot, поэтому обязательно загрузите правильную версию для сервера Debian! Поскольку Debian является основным пакетом Linux (в отличие от ОС Raspberry PI), Certbot можно установить из репозиториев Debian с помощью этой команды:
sudo apt-get install certbot
Каталоги Let's Encrypt, которые необходимо переместить с вашего сервера Raspberry Pi на сервер x86, - это каталоги /etc/letsencrypt и Let's Encrypt на каждом из ваших веб-сайтов под каталогом /var/www (например, /var/www/html/.well-known). Сертификаты TLS вашего сайта находятся в подкаталогах каталога /etc/letsencrypt. Каталоги ниже /etc/letsencrypt не существуют до тех пор, пока Certbot не будет выполнен в первый раз на вашем новом сервере. Прежде чем это произойдет, вы должны использовать структуру каталогов Let's Encrypt в комплекте с Сертификаты TLS с вашего Raspberry Pi и извлечение их на ваш сервер x86. Rsync также может работать, если вы можете сохранить права доступа к каталогам и файлам. Не удаляйте файл /etc/letsencrypt/cli.ini , существующий после установки Certbot на сервере x86. Если вы этого не сделаете, перенесите каталог и содержимое /etc/letsencrypt до при первом запуске Certbot Certbot должен сообщить вам, что он не может обновить ваши сертификаты TLS, поскольку вы не являетесь владельцем соответствующего веб-сайта. Каталоги Let's Encrypt ниже /var/www не требуются, пока вы не запустите Certbot в первый раз, поэтому они могут ждать копирования, пока вы не скопируете всю структуру каталогов /var/www и файлы с вашего Raspberry Pi. На данный момент скопируйте файл вашего каталога и подкаталогов tarred /etc/letsencrypt на ваш сервер x86 и удалите его в том же месте. Расположение. После снятия блокировки для всех каталогов и файлов должны быть установлены те же разрешения, что и на Raspberry Pi.
Теперь скопируйте файл конфигурации сертификата Lighttpd TLS из Raspberry Pi. Это файл /etc/lighttpd/conf-available/10-ssl.conf. Обязательно измените локальный IP-адрес в строке "$SERVER["socket"] == "XX.XX.XX.XX:443" {" на локальный IP-адрес вашего нового веб-сервера x86, а не старого веб-сервера Raspberry Pi! Если бы у вас было три веб-сайта, работающих на вашем сервере Lighttpd-два с сертификатами Let's Encrypt и один с самозаверяющим сертификатом-ваш /etc/lighttpd/conf-available/10-ssl.файл conf может выглядеть примерно так:
server.modules += ( "mod_openssl" )
ssl.openssl.ssl-conf-cmd = ("MinProtocol" => "TLSv1") # or use "TLSv1.1", "TLSv1.2", etc. for higher security that works with fewer browsers
$SERVER["socket"] == "192.168.1.128:443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/letsencrypt/live/website_A.com/fullkeychain.pem" # Combined Certificate
ssl.ca-file = "/etc/letsencrypt/live/website_A.com/chain.pem" # Root CA
server.document-root = "/var/www/html"
# ssl.cipher-list = "HIGH"
ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES128+EECDH:AES128+EDH" #Added to increase cypher strength
ssl.dh-file = "/etc/letsencrypt/live/website_A.com/dhparam.pem" #Added to increase Diffe-Helman strength
ssl.ec-curve = "secp384r1" #Added to increase Diffe-Helman strength
ssl.honor-cipher-order = "enable"
# Let's Encrypt certificate for website_A.com:
$HTTP["host"] =~ "(^|www\.)website_A.com" {
ssl.pemfile = "/etc/letsencrypt/live/website_A.com/fullkeychain.pem" # Combined Certificate
ssl.ca-file = "/etc/letsencrypt/live/Website_A.com/chain.pem" # Root CA
server.document-root = "/var/www/website_A"
ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES128+EECDH:AES128+EDH" #Added to increase cypher strength
ssl.dh-file = "/etc/letsencrypt/live/Website_A.com/dhparam.pem" #Added this to increase Diffe-Helman strength
ssl.ec-curve = "secp384r1" #Added to increase Diffe-Helman strength
ssl.honor-cipher-order = "enable"
}
# Let's Encrypt certificate for website_B.com:
$HTTP["host"] =~ "(^|www\.)website_B.com" {
ssl.pemfile = "/etc/letsencrypt/live/website_B.com/fullkeychain.pem" # Combined Certificate
ssl.ca-file = "/etc/letsencrypt/live/Website_B.com/chain.pem" # Root CA
server.document-root = "/var/www/website_B"
ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES128+EECDH:AES128+EDH" #Added to increase cypher strength
ssl.dh-file = "/etc/letsencrypt/live/Website_B.com/dhparam.pem" #Added this to increase Diffe-Helman strength
ssl.ec-curve = "secp384r1" #Added to increase Diffe-Helman strength
ssl.honor-cipher-order = "enable"
}
# Privately-signed certificate for website_C:
$HTTP["host"] =~ "(^|www\.)website_C.com" {
ssl.pemfile = "/etc/lighttpd/ssl/website_C/server.pem"
server.document-root = "/var/www/website_C"
}
}
Теперь добавьте символические ссылки из каталога с поддержкой /etc/lighttpd/conf в файлы каталога с поддержкой /etc/lighttpd/conf, соответствующие модулям Lighttpd, включенным в файле /etc/lighttpd/lighttpd.conf. Эти ссылки могут включать следующее.
- 05-auth.conf
- 10-evasive.conf
- 10-fastcgi.conf
- 10-ssl.conf
- 10-status.conf
- 15-fastcgi-php.conf
- 90-javascript-alias.conf
Вы можете включить один модуль за раз в файле /etc/lighttpd/lighttpd.conf и добавить соответствующую символическую ссылку в каталог с поддержкой /etc/lighttpd/conf, чтобы вы знали, где искать, если вы сломаете Lighttpd во время этого процесса. Также помните, что некоторые модули зависят от других модулей, появляющихся перед ними в файле lighttpd.conf, поэтому это может быть непросто. Если вы сломаете Lighttpd, продолжайте работать, чтобы найти источник проблемы. Прежде чем добавить ссылку 10-ssl.conf в каталог с поддержкой /etc/lighttpd/conf, подождите, пока вы скопируете каталоги и сертификаты Let's Encrypt (см. Ниже). По состоянию на пару версий назад поддержка SSL компилируется в Lighttpd, поэтому mod_ssl больше не нужно добавлять в файл lighttpd.conf.
Теперь перезапустите Lighttpd с помощью этих команд:
sudo systemctl stop lighttpd
sudo systemclt start lighttpd
Примерно через 20 секунд проверьте, не произошел ли сбой Lighttpd:
sudo systemctl status lighttpd
Если Lighttpd запущен, поздравляем! Если нет, вам придется отлаживать, чтобы найти проблему. Я предлагаю удалить символические ссылки , которые, скорее всего, будут причиной, 10-ssl.conf и 15-fastcgi-php.conf, во-первых. Затем отладьте оттуда.
После завершения этого шага я мог видеть в своей локальной сети мои веб-сайты HTTPS, которые используют сертификаты Let's Encrypt TLS. К сожалению, в первый раз, когда я попытался перейти на тот, который использовал самозаверяющий сертификат, мой браузер показал следующее предупреждение и не позволил мне подключиться:
Error code: SSL_ERROR_INTERNAL_ERROR_ALERT
The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
Когда я нажал кнопку браузера "Просмотреть сертификат", ничего не произошло. Я решил отложить решение этой головоломки, закомментировав код в моем /etc/lighttpd/conf-available/10-ssl.conf, который соответствует моим самозаверяющим сертификатам, фактически возвращая эти веб-сайты на веб-сайты HTTP. Код, который я прокомментировал, будет соответствовать следующему коду в приведенном выше примере /etc/lighttpd/conf-available/10-ssl.conf:
# Privately-signed certificate for website_C:
$HTTP["host"] =~ "(^|www\.)website_C.com" {
ssl.pemfile = "/etc/lighttpd/ssl/website_C/server.pem"
server.document-root = "/var/www/website_C"
}