Let’s Encrypt — бесплатный, автоматизированный и открытый центр сертификации, разработанный Исследовательской группой Internet Security Research Group (ISRG). Сертификаты, выданные Let’s Encrypt, действительны в течение 90 дней с даты выпуска, и сегодня им доверяют почти все браузеры.
В этой статье мы рассмотрим шаги, необходимые для установки бесплатного SSL-сертификата для шифрования SSL на сервере CentOS 7 с Apache в качестве веб-сервера. Мы будем использовать утилиту certbot для получения и обновления сертификатов Let’s Encrypt.
Перед продолжением этой статьи, убедитесь, что вы выполнили следующие предварительные условия:
andreyex.ru
.Установите следующие пакеты, которые необходимы для SSL-зашифрованного веб-сервера:
yum install mod_ssl openssl
Certbot — это инструмент, упрощающий процесс получения SSL-сертификатов от Let’s Encrypt и автоматического включения HTTPS на вашем сервере.
Пакет certbot предоставляется EPEL. Если репозиторий EPEL не установлен в вашей системе, вы можете установить его, используя следующую команду:
sudo yum install epel-release
После того, как репозиторий EPEL включен, установите пакет certbot, введя:
sudo yum install certbot
Обмен ключами Diffie-Hellman (DH) — это метод безопасного обмена криптографическими ключами по необеспеченному каналу связи. Создайте новый набор параметров 2048 бит DH для усиления безопасности:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Вы можете изменить размер до 4096 бит, но в этом случае генерация может занять более 30 минут в зависимости от энтропии системы.
Чтобы получить сертификат SSL для нашего домена, мы собираемся использовать плагин Apache, который работает, создавая временный файл для запрашиваемого домена в каталоге,${webroot-path}/.well-known/acme-challenge
, а сервер проверки подлинности Let’s Encrypt делает HTTP-запросы для проверки DNS для запрашиваемого домена разрешение на сервер, на котором выполняется certbot.
Чтобы сделать его более простым, мы собираем все HTTP-запросы для .well-known/acme-challenge
в одном каталоге /var/lib/letsencrypt
. Следующие команды создадут каталог и сделают его доступным для записи на сервере Apache.
Следующие команды создадут каталог и сделают его доступным для записи на сервере Apache.
mkdir -p /var/lib/letsencrypt/.well-known chgrp apache /var/lib/letsencrypt chmod g+s /var/lib/letsencrypt
Чтобы избежать дублирования кода, создайте следующие два фрагмента конфигурации:
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" <Directory "/var/lib/letsencrypt/"> AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS </Directory>
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder On Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Требует Apache >= 2.4 SSLCompression off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # Требует Apache >= 2.4.11 SSLSessionTickets Off
В приведенном выше фрагменте используются чипперы, рекомендованные Cipherli.st, позволяющие сшивание OCSP, строгая транспортная безопасность HTTP (HSTS) и использование нескольких HTTP-заголовков, ориентированных на безопасность.
Перезагрузите конфигурацию Apache, чтобы изменения вступили в силу:
sudo systemctl reload httpd
Теперь мы можем запустить средство Certbot с помощью плагина webroot и получить файлы SSL сертификатов, набрав:
sudo certbot certonly --agree-tos --email admin@andreyex.ru --webroot -w /var/lib/letsencrypt/ -d andreyex.ru -d www.andreyex.ru
Если сертификат SSL будет успешно получен, certbot напечатает следующее сообщение:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/andreyex.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/andreyex.ru/privkey.pem Your cert will expire on 2018-12-07. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
CentOS 7 поставляется с Apache версии 2.4.6, которая не включает директиву SSLOpenSSLConfCmd
. Эта директива доступна только на Apache позже 2.4.8 и используется для настройки параметров OpenSSL, таких как обмен ключами Diffie-Hellman (DH).
Нам нужно будет создать новый комбинированный файл, используя SSL-сертификат Let’s Encrypt и созданный файл DH. Для этого введите:
cat /etc/letsencrypt/live/andreyex.ru/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/andreyex.ru/cert.dh.pem
Теперь, когда все настроено, отредактируйте конфигурацию виртуального хоста домена следующим образом:
<VirtualHost *:80> ServerName andreyex.ru ServerAlias www.andreyex.ru Redirect permanent / https://andreyex.ru/ </VirtualHost> <VirtualHost *:443> ServerName andreyex.ru ServerAlias www.andreyex.ru <If "%{HTTP_HOST} == 'www.andreyex.ru'"> Redirect permanent / https://andreyex.ru/ </If> DocumentRoot /var/www/andreyex.ru/public_html ErrorLog /var/log/httpd/andreyex.ru-error.log CustomLog /var/log/httpd/andreyex.ru-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/andreyex.ru/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/andreyex.ru/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/andreyex.ru/chain.pem # Остальные конфигурации Apache </VirtualHost>
С приведенной выше конфигурацией мы устанавливаем HTTPS и перенаправляем с www на не-www-версию. Не стесняйтесь настраивать конфигурацию в соответствии с вашими потребностями.
Перезапустите службу Apache, чтобы изменения вступили в силу:
sudo systemctl restart httpd
Теперь вы можете открыть свой веб-сайт, https://
и вы заметите значок зеленого замка.
Если вы протестируете свой домен с помощью теста SSL Labs Server, вы получите оценку A +, как показано ниже:
Сертификаты Encrypt действительны в течение 90 дней. Чтобы автоматически продлить срок действия сертификатов до истечения срока их действия, мы создадим cronjob, который будет работать два раза в день и автоматически обновит сертификат за 30 дней до истечения срока его действия.
Запустите команду crontab
для создания нового cronjob, который обновит сертификат, создаст новый комбинированный файл, включая ключ DH, и перезапустит apache:
sudo crontab -e
0 */12 * * * certbot renew --cert-name andreyex.ru --renew-hook "cat /etc/letsencrypt/live/andreyex.ru/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/andreyex.ru/cert.dh.pem && systemctl restart httpd"
Чтобы протестировать процесс обновления, вы можете использовать переключатель --dry-run
в certbot:
sudo certbot renew --cert-name andreyex.ru --dry-run
Если ошибок нет, это означает, что процесс обновления был успешным.
В этой статье вы использовали клиент Let’s Encrypt, certbot для загрузки сертификатов SSL для вашего домена. Вы также создали фрагменты Apache, чтобы избежать дублирования кода и настроите Apache для использования сертификатов. В конце статьи вы создали cronjob для автоматического обновления сертификата.
Добрый день. Отличная статья. Все кратко, четко.
У меня вопрос: ОС: CentOS 7.6.1810, руководствуюсь Вашей инструкцией, запись типа А домена вида web.domain.su сделана и резолвится, сопоставление web.domain.su и ip прописаны в hosts, веб-сервер запущен и настроен, порты 80 и 443 открыты.
При этом формируется самоподписной сертификат. Необходим сертификат, подписанный Let’s Encrypt Authority X3.
Куда посмотреть?
При попытке обновить, все делал по вашей инструкции получаю ошибку, похоже не работает. centos последний
sudo certbot renew —cert-name my.domen —dry-run
Attempting to renew cert (my.domen) from /etc/letsencrypt/renewal/my.domen.conf produced an unexpected error: Missing command line flag or config entry for this setting:
Select the webroot for my.domen:
Choices: [‘Enter a new webroot’, ‘/var/lib/letsencrypt’]
(You can set this with the —webroot-path flag). Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/my.domen/fullchain.pem (failure)
кто разобрался, почему самоподписанный сертификат получается?
Сделал по статье все прошло четко, только при тесте сертификата получил не А оценку, а B.
Спасибо огромное, ваша инструкция идеальна.
Я перепробовал сотни способов, но не работало.