Установка SSL-сертификата на локальный сайт

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (35)

просмотр истории страницы
{toc:maxLevel=3}

h3. Введение
{tip}*Время выполнения инструкции*: до 15 минут начальная настройка, 2-3 минуты последующее обновление сертификата{tip}

h2. Введение

При работе личного кабинета абонента по https, используются автоматически сгенерированные самоподписанные сертификаты.

Получите нужные файлы у центра сертификации и по scp скопируйте их на сервер, например в директорию /tmp.

С дополнительной информацией по установке сертификатов можно ознакомиться по ссылке [https://knowledge.digicert.com/home.html]

{warning:title=Warning}
Необходимо создавать или заказывать ssl сертификаты без пароля. Иначе при перезапуске web сервера придётся каждый раз вводить пароль. Это создаёт проблемы при обновлении и подобных операциях.
{warning}

h32. Поддерживаемые сертификаты

# Ru Center
# RapidSSL
h3. RU-CENTER

h3. Соответствие имён сертификатов от RU CENTER
[https://www.nic.ru]

h4. Заказ сертификата RU-CENTER

*Имена файлов могут отличаться. Например при использовании сертификатов от Thawte (в качестве посредника может быть RU CENTER), вы получите набор:*
Если вы хотите заказ свой сертификат для своего домена, то для начала вам нужно сгенерировать запрос на получение сертификата (CSR), подробнее вы можете посмотреть на [сайте Руцентра|http://www.nic.ru/dns/service/ssl/csr.html].

* root_cert_sslwebserver.crt \- соответствует *ca_bundle.crt*;
По указанной ссылке доступна инструкция "Генерация CSR для Apache", для генерации запроса нужно выполнить шаги из инструкции.

h4. Соответствие имён сертификатов от RU-CENTER

*Имена файлов могут отличаться. Например при использовании сертификатов от Thawte (в качестве посредника может быть RU-CENTER), вы получите набор:*

* root_cert_sslwebserver.crt \- соответствует *ca_bundle.crt*;
* domain_name_date.crt - соответствует *ca.crt* в команде ниже;
* private.key \- обычно \- обычно зашифрован и запаролен, соответствует *ca.key* в команде ниже;
* domain.name.csr - не нужен.

h3. Инструкция по установке сертификата
h3. RapidSSL

[https://www.rapidssl.com]

h3. COMODO

[https://ssl.comodo.com]

Если Вы используете сертификат от COMODO, вероятно Вам пришлют файл с цепочкой корневых сертификатов, или же несколько таких сертификатов в разных файлах.
Если их несколько, просто сохраните их содержимое в едином текстовом файле. В обоих случаях, в httpd.conf вместо переменной SSLCACertificateFile используйте SSLCertificateChainFile, например:
{code}#SSLCACertificateFile /etc/pki/tls/certs/ca_bundle.crt
SSLCertificateChainFile /etc/pki/tls/certs/CA.ca-bundle{code}

На всякий случай: [Документация Comodo по установке SSL-сертификата в Apache|https://support.comodo.com/index.php?/comodo/Knowledgebase/Article/View/637/66/]

h3. Let's Encrypt

[https://letsencrypt.org]

К сожалению, поддержка CentOS 6 в Certbot от Let's Encrypt прекращена, и установить его на биллинг достаточно проблематично.

Но Вы можете:
* [cоздать сертификат вручную на стороннем сервере|https://certbot.eff.org/docs/using.html#manual]
* [или онлайн|https://www.sslforfree.com]

и положить вручную на сервер биллинга по инструкции далее.

h2. Инструкция по установке сертификата

# Настройте порты и включите SSL в конфигурационном файле /app/asr_cabinet/cfg/config
По-умолчанию порт 443 занят Codeigniter (старый ЛК), а ssl для Wordpress находится на порту 8443. Необходимо поменять порты местами, включить SSL для Wordpress, после чего перезапустить контейнер чтобы корректно сформировались правила *iptables*
# Внесите изменения в конфигурационный файл Apache:
*/app/asr_cabinet/etc/httpd/conf/httpd.conf*
#* В настройках *<VirtualHost \*:80>* змените *RewriteCond %\{REQUEST_URI\} ^/cabinet.* на *RewriteCond %\{HTTPS\} off* чтобы HTTPS был включен глобально на сайт, а не только личный кабинет. Должно получиться приблизительно следующее: \\ \\
Замените *RewriteEngine Off* на *RewriteEngine On*, чтобы включить движок редиректов.
Должно получиться приблизительно следующее: \\ \\
{code}<VirtualHost *:80>
DocumentRoot /var/wordpress/
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCACertificateFile /etc/pki/tls/certs/ca_bundle.crt
SSLCertificateFile /etc/pki/tls/certs/ca.crt
#SSLVerifyClient require
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
# Скопируйте сертификаты в директорию сертификатов:
{code}
mkdir -p /app/asr_cabinet/cfg/etc/pki/tls/certs
mkdir -p /app/asr_cabinet/etc/pki/tls/certs
cp -p /tmp/ca.crt /app/asr_cabinet/cfg/etc/pki/tls/certs/ca.crt
# Скопируйте ключ для сертификата
{code}
# mkdir app/asr_cabinet/etc/pki/tls/private
# mkdir app/asr_cabinet/cfg/etc/pki/tls/private
# cp -p /tmp/ca.key app/asr_cabinet/cfg/etc/pki/tls/private/ca.key
# cp -p /tmp/ca.key app/asr_cabinet/etc/pki/tls/private/ca.key
mkdir -p /app/asr_cabinet/etc/pki/tls/private
mkdir -p /app/asr_cabinet/cfg/etc/pki/tls/private
cp -p /tmp/ca.key /app/asr_cabinet/cfg/etc/pki/tls/private/ca.key
cp -p /tmp/ca.key /app/asr_cabinet/etc/pki/tls/private/ca.key
{code}
# Проверка корректности установки сертификата
{code}
Если сертификат установлен корректно, то у Вас отобразится следующее:
{panel}Останавливается httpd:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \[&nbsp; OK&nbsp; \]
Запускается httpd:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; \[&nbsp; OK&nbsp; \]{panel}
В том случае, если при запуске *httpd* отображается сбой, то необходимо проверить лог ошибок, который находится в */app/asr_cabinet/var/log/httpd/error_log.*
{panel}Останавливается httpd: \[ OK \]
Запускается httpd: \[ OK \]{panel}


После того, как сервис *httpd* корректно запустится, необходимо выполнить команду

{code}/app/asr_cabinet/service restart{code}
Если в результате перезапуска все сервисы стартовали со статусом \[&nbsp; OK&nbsp; \[ OK \], необходимо проверить корректность установки сертификата и переадресации на https при переходе в личный кабинет, например через браузер Firefox.

Используя браузер можно увидеть ошибки сертификата:
* *просроченный сертификат* \- вышел срок действия сертификата, нужно покупать новый.

h3. Заказ сертификата RUcenter
h2. Два доменных имени для локального сайта

Если вы хотите заказ свой сертификат для своего домена, то для начала вам нужно сгенерировать запрос на получение сертификата (CSR), подробнее вы можете посмотреть на [сайте Руцентра|http://www.nic.ru/dns/service/ssl/csr.html].
Иногда для сайта регистрируют два доменных имени. Например в разных зонах example.com и example.org . Для работы обоих доменных имён в личном кабинете нужно настроить виртуальные хосты вэб-сервера. Дополнение к выше приведённой инструкции:

По указанной ссылке доступна инструкция "Генерация CSR для Apache", для генерации запроса нужно выполнить шаги из инструкции.
# Откройте конфигурационный файл
{code}
/app/asr_cabinet/cfg/etc/httpd/conf/httpd.conf
{code}
# Добавье в секцию имени хостов *Section 3: Virtual Hosts* строчку:
{code}
NameVirtualHost *:443
{code}
Так выглядит конечный результат:
{code}
NameVirtualHost *:8888
NameVirtualHost *:442
NameVirtualHost *:441
NameVirtualHost *:440
NameVirtualHost *:444
NameVirtualHost *:445
NameVirtualHost *:8443
NameVirtualHost *:443
{code}
# Добавьте опцию *ServerName* для первого домена в описание хоста:
{code}
<VirtualHost *:443>
DocumentRoot /var/wordpress/
AddDefaultCharset utf-8
ServerName example.com
<Directory /var/wordpress>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCACertificateFile /etc/pki/tls/certs/ca_bundle.crt
SSLCertificateFile /etc/pki/tls/certs/ca.crt
#SSLVerifyClient require
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
</VirtualHost>
{code}
# Продублируйте блок *VirtualHost* с настройкой *ServerName* для второго домена:
{code}
<VirtualHost *:443>
...
ServerName example.com
...
</VirtualHost>

<VirtualHost *:443>
...
ServerName example.org
...
</VirtualHost>
{code}
# Проведите настройку сертификата для второго домене example.org как указано в разделе [Инструкция по установке сертификата|Установка SSL-сертификата на локальный сайт#Инструкция по установке сертификата].
{note}
Нужно учесть, что имена файлов сертификата для второго домена должны отличаться от первого.
{note}
То есть, примерно так:
{code}
<VirtualHost *:443>
...
ServerName example.com
...
SSLCertificateFile /etc/pki/tls/certs/ca_example_COM.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca_example_COM.key
SSLCACertificateFile /etc/pki/tls/certs/ca_bundle_COM.crt
...
</VirtualHost>

<VirtualHost *:443>
...
ServerName example.org
...
SSLCertificateFile /etc/pki/tls/certs/ca_example_ORG.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca_example_ORG.key
SSLCACertificateFile /etc/pki/tls/certs/ca_bundle_ORG.crt
...
</VirtualHost>
{code}
# Перезапустите контейнер личного кабинета для применения настроек:
{code}
/app/asr_cabinet/service restart
{code}

h2. Проверка срока действия сертификата

Вы можете узнать информацию по сертификату программой *openssl*. Этой командой можно узнать срок действия сертификата:

{code}openssl x509 -text -noout -in mucert ca.crt | grep -E 'Before|After'{code}

* *Before* - время начала действия
* *After* - время окончания действия

Вы так же можете проверить срок действия с помощью команды:
{code}
cat /cfg/etc/pki/tls/certs/ca.crt | openssl x509 -noout -enddate
{code}

h2. Отладка

Если при запуске *httpd* отображается сбой, Вы можете попробовать найти причину в логе */app/asr_cabinet/var/log/httpd/error_log.*: по типовым ошибкам и как их решать очень много информации в интернете: как правило, это ошибки синтаксиса в файлах конфигурации (не хватает каких-то символов, лишние символы, "директивы" не на своём месте и тд).

h3. Закрытый ключ не подходит к сертификату

Проверьте соответствие сертификата и его ключа консольными команда. Для этого необходимо вычислить md5 хэш модуля каждого файла. Равенство хэша означает соответствие private key и сертификата

# Зайдите в контейнер: {code}chroot /app/asr_cabinet/{code}
# Проверьте контрольную сумму файла сертификата
{code}openssl rsa -modulus -noout -in /etc/pki/tls/private/ca.key | openssl md5{code}
# Проверьте контрольную сумму закрытого ключа
{code}openssl x509 -modulus -noout -in /cfg/etc/pki/tls/certs/ca.crt | openssl md5{code}

Если в выводе будут разные значения: значит, ошибка в этом.

h4. Как исправить

# Положите на сервере правильную пару сертификата и закрытого ключа
# Перезапустите веб-сервер:
{code}chroot /app/asr_cabinet/ service httpd restart{code}

h3. Сертификат установили, но при открытии сайта всё равно ошибка сертификата. Как проверить, на какой домен выдан сертификат?

Зайдите на сервер по SSH и выполните проверку утилитой curl:
{code:title=grep subject <(curl -ssvvkI https://169.254.0.80:443 2>&1)}
* subject: CN=10.90.185.127,OU=Fiscal secure web server,O=Carbon_Billing
{code}
В примере выше сертификат самоподписной, это видно по тексту *CN=10.90.185.127*: CN означает "Common Name", то есть домен для которого сертификат выдан. Тут должен быть Ваш домен.
Например, если сайт и ЛК должны быть доступны по адресу *example.com*, вывод команды должен быть примерно следующим:
{code}
* subject: CN=example.com
{code}

h4. Как исправить

# Купите сертификат на Ваш домен или создайте бесплатный с помощью Let's Encrypt (на другом сервере).
# Настройте сервер по инструкции выше

h2. Восстановление стандартных настроек

# Сохраните конфигурационный файл
{code}
mv /app/asr_cabinet/cfg/etc/httpd/conf/httpd.conf /root/
{code}
# Перезапустите контейнер личного кабинета
{code}
/app/asr_cabinet/service restart
{code}