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

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

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

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

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

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

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

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

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

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

# Внесите изменения в конфигурационный файл 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/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
{panel}Останавливается httpd: \[ OK \]
Запускается httpd: \[ OK \]{panel}
В том случае, если при запуске *httpd* отображается сбой, то необходимо проверить лог ошибок, который находится в */app/asr_cabinet/var/log/httpd/error_log.*


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

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

Иногда для сайта регистрируют два доменных имени. Например в разных зонах example.com и example.org . Для работы обоих доменных имён в личном кабинете нужно настроить виртуальные хосты вэб-сервера. Дополнение к выше приведённой инструкции:

# Откройте конфигурационный файл
{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*. Этой командой можно узнать срок действия сертификата:

* *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}