SSL сертификат CentOS 7 apache

Потребовалось установить бесплатный SSL-сертификат от Let's Encrypt на сервер с 7 и с Apache в качестве веб-сервера. Проще всего сделать это с помощью Certbot — написанного на python плагина, который позволяет получить и регулярно обновлять SSL сертификат для домена, поскольку выданные Let's Encrypt сертификаты действительны только 90 дней с момента генерации.

В сети находится много инструкций для получения сертификатов, однако большая часть их требуют создания дополнительных проверочных директорий и разрешений, нам такое не годится. Мне кажется, что проще на несколько секунд глубокой ночью остановить web сервер, выполнить скрипт и получить SSL сертификат; и затем уж стартануть с новыми силами.

Впрочем, не будем растягивать инструкцию, мне за символы тут никто не платит… Приступаем!

Если у вас в CentOS уже установлен репозиторий от epel, то этот пункт можно пропустить. Проверить, установлен ли у вас epel можно так:

# установлен ли у вас epel ?
yum repolist | grep epel
 * epel: mirror.freethought-internet.co.uk
epel/x86_64               Extra Packages for Enterprise Linux 7 - x86

Иначе действуем так:

# Подключаем epel release:
yum install -y epel-release

Следующий ход — устанавливаем плагин certbot для apache:

# устанавливаем плагин certbot для apache:
yum install -y certbot python2-certbot-apache

Генерируем (выпускаем) сертификат:

# Сначала останавливаем на время генерации наш web-сервер:
service httpd stop
# Генерируем (выпускаем) сертификат.
certbot certonly --standalone --agree-tos --email NAME@YOURMAIL.ru -d YOUR_DOMAIN.ru
# Стартуем web-сервер:
service httpd start

В момент генерации мы получили следующий текст:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/YOUR_DOMAIN./fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/YOUR_DOMAIN.ru/privkey.pem
   Your cert will expire on 2019-11-10. 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"

Видим наш сертификат, который нужно еще добавить в конфиг вашего домена YOUR_DOMAIN.ru. Создаем файл с конфигом в директории /etc/httpd/conf.d/. Пример конфига ниже:

<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
<VirtualHost *:443>
#SSL
SSLEngine On
SSLCertificateFile      /etc/letsencrypt/live/YOUR_DOMAIN.ru/fullchain.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/YOUR_DOMAIN.ru/privkey.pem
# SSL stapling
SSLUseStapling on
# Intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          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
SSLHonorCipherOrder     on
SSLCompression          off
SSLOptions +StrictRequire
 
ServerAdmin support@YOUR_DOMAIN.ru
ServerName YOUR_DOMAIN.ru
DocumentRoot /home/diman/YOUR_DOMAIN.ru/public
RewriteEngine off
<Directory /home/diman/YOUR_DOMAIN.ru>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} -s [OR]
        RewriteCond %{REQUEST_FILENAME} -l [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^.*$ index.php [NC,L]
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require ip 9.9.9.9
 
        Require all granted
</Directory>
ErrorLog /var/log/httpd/YOUR_DOMAIN.ru.error.log
CustomLog /var/log/httpd/YOUR_DOMAIN.ru.access.log combined
</VirtualHost>
</IfModule>

Конечно же, нужно не забыть и разрешить 443 порт в firewall.

Теперь перезапускаем apache и, если все нормально, то делаем редирект из http в https:

# Останавливаем web-сервер:
service httpd stop
# Стартуем web-сервер:
service httpd start
# Для редиректа из http -> https ддобавляем в конфиг http:
 <If "%{HTTP_HOST} == 'YOUR_DOMAIN.ru'">
    Redirect permanent / https://YOUR_DOMAIN.ru/
  </If>
# И снова рестартим web-сервер..

Для продления SSL сертификата требуется регулярно, не менее 1 раза в 90 суток выполнять скрипт, который будет обновлять все сертификаты. Мы будем пытаться обновить его каждое воскресенье в 3:55. Для этого добавим в крон задание:

 
crontab -e 
55 03 * 1,3,5,7,9,11 6 /usr/sbin/service httpd stop;  /usr/bin/certbot renew; /usr/sbin/service httpd start

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

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