Установка SSL сертификата (Apache)


Установка SSL сертификата на сервер производится для того программного пакета, который играет роль фронтенда при обработке запросов.

В инструкции ниже рассмотрен процесс для веб-сервера Apache, инструкция для nginx доступна по ссылке.

Определить какой пакет используется на сервере можно выполнив в консоли такую команду


netstat -nltp | grep 443

tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 29348/apache


В примере в выводе процесс apache

Для дистрибутива CentOS процесс будет называться httpd. При перезапуске и проверке статуса сервиса в этом случае также нужно использовать имя httpd, в целом принципы не меняются.


Для установки потребуется работающий с сервера сайт, SSL сертификат, приватный ключ к нему и цепочка промежуточных сертификатов.


Можно использовать сертификаты, сгенерированные самостоятельно на Linux сервере (самоподписанные сертификаты).

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



Установка SSL сертификата на сервер Apache по шагам


1. Чтобы установить на сервер сертификат необходимо подключиться к нему по протоколу SSH от имени пользователя root;



2. Файлы сертификатов могут размещаться в любом каталоге, часто их размещают в  /etc/apache2/ssl.


Переходим в /etc/apache2 и создаем директорию

cd /etc/apache2

mkdir ssl



3.Создаем файлы сертификата, приватного ключа и промежуточного сертификата и добавляем в них содержимое файлов, полученных от центра сертификации (или сгенерированных на сервере)



mcedit /etc/apache2/ssl/example.com.crt

Содержимое сертификата выглядит примерно следующим образом:

——BEGIN CERTIFICATE——
MIIFEDCCA/igAwIBAgISA+1wB7/BBdk7NHpvkfWRpapqMA0GCSqGSIb3DQEBCwUA

d2gQqeTP1n8n2GRcJE7gKgduglfs1YfvE3CtoMYEm6veKKvVKE8AGox0USUPuM8S
——END CERTIFICATE——



SHIFT+INS чтобы вставить содержимое
F2 чтобы сохранить
Выходим нажимая ESC



Аналогичным образом создаем файл приватного ключа


mcedit /etc/apache2/ssl/example.com.key


Пример содержимого файла:
——BEGIN PRIVATE KEY——
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChoT+eOaGZXNtk

zIP3mn5WValj5yBOeX61f2qy0jy8RcwHMJbiA3IEw6oVVi+iTO6kgHrwhULCWJ8T
——END PRIVATE KEY——



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


mcedit /etc/apache2/ssl/intermediate.crt

Пример промежуточного сертификата:



——BEGIN CERTIFICATE——
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/

GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
——END CERTIFICATE——



4. Что того чтобы работа веб-сервера по защищенному соединению была возможна необходимо, что был включен модуль apache2 SSL



Просмотреть включен ли модуль можно выполнив следующую команду:

apache2ctl -M | grep ssl


Если вывод не пустой — модуль активирован. Если в выводе ничего нет включаем модуль:

a2enmod ssl

После выполнения команды появляется сообщение «Enabling module ssl».



5. Переходим в каталог, в котором размещаются конфигурационные файлы сайтов — cd /etc/apache2/sites-available и находим конфигурационный файл сайта, подключение к которому по https настраиваем — в данном случае — example.com.conf



6. Создаем копию конфигурационного файла сайта и вносим в него коррективы

cp example.com.conf ssl-example.com.conf


6.1 В строке VirtualHost указываем порт по которому будет осуществляться подключение при работе по https — меняем 80 (значение для http) на 443


6.2 В качестве ServerName указываем имя сайта example.com


6.3 Приводим файл к следующему виду, указывая в нем полные пути к сертификату, приватному ключу и сертификату промежуточному SSLCertificateFile SSLCertificateKeyFile и SSLCACertificateFile


ServerAdmin [email protected]
ServerSignature On
ServerName example.com
AddDefaultCharset utf-8
CustomLog /var/log/apache2/logs/example.com/access.log combined
LogLevel error
SuexecUserGroup user user
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
SSLCACertificateFile /etc/apache2/ssl/intermediate.crt
SSLProtocol All -SSLv2 -SSLv3
SSLCipherSuite kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2 SSLCompression off

SSLHonorCipherOrder on

DocumentRoot '/home/admin/example.com/www/'
……



7. Активируем сайт:

a2ensite ssl-example.com.conf

Фактически при выполнении команды создается символьная ссылка /etc/apache2/sites-availible/ssl-example.com.conf /etc/apache2/sites-enabled/



8. Перезапускаем веб-сервер для того чтобы изменения вступили в силу:

systemctl restart apache2



9. Проверяем статус

systemctl status apache2


Установка SSL сертификата


Если никаких ошибок не наблюдается — можно проверять доступность сайта по https. Также следует проверить корректность установки сертификата при помощи одного из онлайн-сервисов, предоставляющих подобную возможность.


Установка SSL сертификата на сервер с Apache завершена.

Читайте также про установку для Nginx

Сказать спасибо