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

После того как вы заказали сертификат и сгенерировали запрос на валидацию, нужно установить полученные пакеты .crt/.ca на сервер. 

.ca - файл сертификатов 
.crt - файл, сконфигурированный для сайта

Загрузка необходимых файлов на сервер

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

Переносим файлы с Linux/Mac OS

Опция SCP встроена в терминал системы. Положите .ca/.crt на локальный ПК. После, запустите терминал и найдите директорию, в которую сохранили файлы сертификатов. С помощью SCP перенесите файлы на сервер:

scp crt.crt ca.crt user@1.22.33.444:/etc/ssl
  • scp — копирование файлов
  • mydomain.ru_crt.crt — сертификат веб-сайте
  • mydomain.ru_ca.crt — сертификат Центра Авторизации
  • user — root или иное имя пользователя, установленное для подключения к серверу по SSH
  • 1.22.33.444 — IP сервера
  • /etc/ssl — путь до папки, которую вы сохраните файлы

Переносим файлы сертификатов с Windows

Вам необходимо инсталлировать WinSCP. Ссылка: https://winscp.net/download/WinSCP-5.9.1-Setup.exe 

Запустите программу. Заполните строки валидными параметрами для соединения по SSH. Левая часть интерфейса инструмента — список файлов на локальном ПК, правая — список файлов, которые находятся на сервере. Перетащите сертификаты из левого поля в правое. 

Через терминал это делается следующим образом:

cp /home/root/private.key /<span style="font-size: 12.6px;">etc</span>/ssl/private.key
  • cp — копирование
  • /home/root/ — путь до ключа
  • private.key — файл ключа
  • /etc/ssl/private.key — путь, для копирования файла ключа

Чтобы удалить старый ненужный файл конфигурации:

rm /home/root/private.key

Встраиваем SSL-сертификат в Apache

Вы получили заказанные сертификаты. Теперь вам необходимо подогнать настройки вашего сервера под интеграцию с SSL. Произведите подключение к веб-серверу по SSH с правами администратора и выполните следующее: 

  1. включите поддержку SSL на сервере — a2enmod ssl (Ubuntu)
yum install mod_ssl (Cent OS)
  1. отредактируйте конфигурационный файл сервера, на котором будут развернуты сертификаты с помощью утилиты nano. Вставьте в файл следующий код:
SSLEngine on
SSLCertificateFile /etc/ssl/mydomain.ru_crt.crt

SSLCertificateChainFile /etc/ssl/mydomain.ru_ca.crt

SSLCertificateKeyFile /etc/ssl/mydomain.ru_key.key

Где:

  • /etc/ssl/mydomain.ru_crt.crt — путь к сертификату 
  • /etc/ssl/mydomain.ru_ca.crt — путь до файла цепочки сертификатов Центра Сертификации (CA)
  • /etc/ssl/mydomain.ru_key.key — путь к закрытому ключу

Примечание: если вам необходимо, чтобы после инсталляции SSL ваш сайт был доступен только по защищенному протоколу https, измените его конфигурационный файл (добавьте код):

<strong><VirtualHost *:443></strong>         # The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.mydomain.ru
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
<strong> SSLEngine on
SSLCertificateFile /etc/ssl/mydomain.ru_crt.crt
SSLCertificateChainFile /etc/ssl/mydomain.ru_ca.crt
SSLCertificateKeyFile /etc/ssl/mydomain.ru_key.key</strong>
</VirtualHost>

При использовании HTTPS + HTTP

<strong><VirtualHost *:443></strong>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.mydomain.ru
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only

# after it has been globally disabled with "a2disconf".

#Include conf-available/serve-cgi-bin.conf

<strong>        SSLEngine on

SSLCertificateFile /etc/ssl/mydomain.ru_crt.crt

SSLCertificateChainFile /etc/ssl/mydomain.ru_ca.crt

SSLCertificateKeyFile /etc/ssl/mydomain.ru_key.key</strong>

</VirtualHost>

<VirtualHost *:80>

# The ServerName directive sets the request scheme, hostname and port that

# the server uses to identify itself. This is used when creating

# redirection URLs. In the context of virtual hosts, the ServerName

# specifies what hostname must appear in the request's Host: header to

# match this virtual host. For the default virtual host (this file) this

# value is not decisive as it is used as a last resort host regardless.

# However, you must set it for any further virtual host explicitly.

#ServerName www.mydomain.ru

ServerAdmin webmaster@localhost

DocumentRoot /var/www/html

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,

# error, crit, alert, emerg.

# It is also possible to configure the loglevel for particular

# modules, e.g.

#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined

# For most configuration files from conf-available/, which are

# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

После модификации файла конфигурации, вам необходимо перезагрузить APACHE:

/etc/init.d/apache2 restart (Ubuntu)
apachectl restart (Cent OS)

В случае, если сервер использует межсетевой экран IPTABLES, вам необходимо разрешить внешнее подключение по https:

ufw allow 443/tcp

Проверка настроек

Для проверки валидности конфигурации откройте откройте ваш-веб сайт в браузере по протоколу HTTPS (например, https://mydomain.ru). Если сертификат установлен корректно, в адресной строке вашего браузера вы увидите иконку замка.