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

После получения необходимых файлов и сертификата, необходимо встроить этот сертификат на сервер, чтобы потом им подписать ваше доменное имя. Данный материал описывает установку сертификата с помощью менеджера ISPmanager, а также установку напрямую, не используя утилиты.

Использование ISPmanager 6

Авторизируйтесь в качестве пользователя, который владеет необходимым доменом. Чтобы это сделать, войдите в систему с правами суперпользователя (root), после найдите в меню пункт «Пользователи«, выберите «Войти под пользователем».

Важно: вам необходимо подключить возможность использования SSL. В пункте «Пользователи», в настройках определенного пользователя найдите «Может использовать SSL», отметьте этот пункт.

В подменю «SSL-сертификаты« — «Добавить сертификат».

Тип сертификата — существующий.

Параметры:

Имя сертификата — имя формируется в зависимости от информации, которая содержится в сертификате + «_customX» Если у ваша версия панели < 6.19, то вам необходимо вручную установить имя сертификата. SSL-Сертификат — поле, для загрузки файла .crt. Ключ сертификата — содержимое приватного ключа (файл .key). Также вам необходимо представить в панель файл (.ca/.ctrca). Это цепочка сертификатов (сертификат, которым подписан ваш исходный). Содержимое сертификатов просто скопируйте из файлов и вставьте в подходящие поля.

Например: цепочка сертификатов от GlobalSign 

Вы получаете архив с файлами (файл .p7b сертификат и цепочка сертификата, файл с именем домена + открытый ключ + сертификат, корневой ключ цепочки сертификата, промежуточный ключ .crt).

Чтобы создать цепочки сертификата поместите в один файл .txt корневой ключ сертификата, после за ним, начиная с новой строки, промежуточный ключ и установите для него название GlobalSign.ca. Откройте файлы с ключами цепочки через любой текстовый редактор. Скопируйте содержимое, обязательно проверьте целостность скопированного кода.

Когда вы добавили сертификат, переходите на страницу «Сайты», запустите сервер. Вы увидите установленный сертификат. Но если настройки сайта будут меняться, то файлы конфигурации будут перезаписаны автоматически.

Изменения в файлах, которые вы вносили руками, могут не сохраниться. В случае возникновения подобной ситуации вам нужно перейти в /var/www/httpd-cert/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_СЕРТИФИКАТА и повторно внести нужные изменения.

Проверка сертификата

Используйте ресурс: https://www.ssllabs.com/ssltest/analyze.html

Для проверки валидности работы установленного сертификата: https://www.sslshopper.com/ssl-checker.html

Установка SSL-сертификата без использования внешних панелей

В первую очередь, подключитесь к серверу по SSH. 

Проверьте порт 443 — (netstat -napt | grep 443 или ss -tlpn | grep 443 или sockstat | grep 443 для FreeBSD). 

Образец вывода: root      httpd      83299 19 tcp4   188.120.225.20:443    *:*

Установка с использованием файла конфигурации веб-сервера

Apache

Путь для установки сертификата:

UBUNTU/DEBIAN — /etc/apache2/apache2.conf

Centos — /etc/httpd/conf/httpd.conf

FreeBSD — /usr/local/etc/apache22/httpd.conf

Создайте <VirtualHost>, чтобы осуществить SSL-соединение:

<VirtualHost 10.0.0.1:443>

  DocumentRoot /var/www/user/data/www/domain.com

  ServerName domain.com

  SSLEngine on

  SSLCertificateFile /path/to/domain.crt

  SSLCertificateKeyFile /path/to/domain.key

  SSLCACertificateFile /path/to/ca.crt

</VirtualHost>

Где:

  • domain.com — доменное имя вашего домена
  • 10.0.0.1 — IP адрес домена
  • /var/www/user/data/www/domain.com — путь до домашней директории, где расположен ваш домен
  • /path/to/domain.crt — файл с сертификатом
  • /path/to/domain.key — файл с ключом для сертификата
  • /path/to/ca.crt — файл, содержащий корневой сертификат

После установки изменений, используйте команду:

apachectl -t

Если получено сообщение — Syntax OK, то можете перезапустить сервер — systemctl restart apache2 или systemctl restart httpd или apachectl restart

NGINX

Откройте файл конфигурации сервера. Путь: /etc/nginx/nginx.conf

Инициализируйте модуль SSL:

server {

        listen 10.0.0.1:443;

 

        server_name domain.com;

        ssl                  on;

        ssl_certificate     /path/to/domain.crt;

        ssl_certificate_key  /path/to/domain.key ;

  }

domain.com — доменное имя
10.0.0.1 — IP, который принадлежит домену
путь — /path/to/domain.crt (сертификат)
/path/to/domain.key — ключ сервера (путь)

Цепочка сертификата добавляется в файл с самим сертификатом.

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

nginx -t — проверка конфигурации

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Если вы увидели подобный вывод, то SSL настроен корректно

systemctl restart nginx — перезапуск сервера

SSL-сертификаты (несколько) на едином IP

Браузер получит сертификат сервера, выставленный по умолчанию. Это не зависит от недостаточной настройки, так работает SSL. Чтобы разрешить работы нескольких сертификатов на одном IP, необходимо воспользоваться расширением SNI протокола TLS. Ссылка на документацию (https://tools.ietf.org/html/rfc6066). Данный модуль позволит установить SSL-handshake, во время которого сервер определит необходимый сертификат для использования. Большинство современных браузеров поддерживает это решение, но стоит обратить внимание также на версию библиотеки OpenSSL, она должна быть > 0.9.8f.

Полезные команды Openssl

  • Создание ключа для SSL-сертификата:

openssl req -batch -noout -new -newkey rsa:2048 -nodes -keyout cert.key

  • Сгенерировать CSR-запрос:

openssl req -new -key cert.key -out cert.csr

  • Сделать ключ без пароля:

openssl rsa -in cert.key -out cert.key

  •  CSR данные:

openssl req -noout -text -in cert.csr

  • Данные сертификата (проверить кем выдан, например):

openssl x509 -noout -text -in cert.crt

  • Проверить, что ключ соответствует сертификату:

openssl x509 -noout -modulus -in cert.crt | openssl md5

openssl rsa -noout -modulus -in cert.key | openssl md5

Два последних значения должны совпадать, в нашем случае это md5.

  • Узнать длину запроса:

echo ‘(‘ `openssl req -noout -modulus -in cert.csr | cut -d’=’ -f2 | wc -c` ‘-1)*4’ | bc

  • Проверить HTTPS:

openssl s_client -host  ulanovka.ru -port 443