Просмотр Исходного

{toc:maxLevel=3}

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

h2. Введение

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

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

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

Сертификационные центры чаще всего используют трехуровневую схему подписей,

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

Сертификаты должны быть в формате PEM.

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

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

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

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

h3. RU-CENTER

[https://www.nic.ru]

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

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

По указанной ссылке доступна инструкция "Генерация 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. 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]

Выдержка из руководства "Приступая к работе" с сайта letsencrypt.org:
_...Установите Certbot на ваш компьютер для запуска в [ручном режиме|https://certbot.eff.org/docs/using.html#manual]. Загрузите специальный файл в папку сайта, чтобы подтвердить факт владения. Certbot создаст сертификат для доменного имени этого сайта, для последующей отправки на web-сервер..._

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

# Настройте порты и включите SSL в конфигурационном файле /app/asr_cabinet/cfg/config
По-умолчанию порт 443 занят Codeigniter (старый ЛК), а ssl для Wordpress находится на порту 8443. Необходимо поменять порты местами, включить SSL для Wordpress, после чего перезапустить контейнер чтобы корректно сформировались правила *iptables*
#* Измените порт ssl в переменной *app\['wordpress.sslport'\]* на 443 и включите ssl для Wordpress в переменной *app\['wordpress.use_ssl'\]* \\ \\
{code}app['wordpress.sslport']='443'
app['wordpress.use_ssl']='1'{code}
#* Поменяйте порт Codeigniter на 8443 \\ \\
{code}app['apache.sslport']='8443'
app['apache.sslip']='169.254.4.43'
{code}
#* Перезапустите *asr_cabinet*: \\ \\
{code}/app/asr_cabinet/service restart{code}
# Внесите изменения в конфигурационный файл Apache:
*/app/asr_cabinet/etc/httpd/conf/httpd.conf*
#* В настройках *<VirtualHost \*:80>* змените *RewriteCond %\{REQUEST_URI\} ^/cabinet.* на *RewriteCond %\{HTTPS\} off* чтобы HTTPS был включен глобально на сайт, а не только личный кабинет. Должно получиться приблизительно следующее: \\ \\
{code}<VirtualHost *:80>
DocumentRoot /var/wordpress/
AddDefaultCharset utf-8
<Directory /var/wordpress>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
#Redirect to https!
RewriteEngine On
#Check for POST Submission
RewriteCond %{REQUEST_METHOD} !^POST$
# Forcing HTTPS
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{SERVER_PORT} 80
# Pages to Apply....
RewriteCond %{HTTPS} off
RewriteRule .* https://%{SERVER_NAME}:443%{REQUEST_URI} [R=301,L]
</VirtualHost>{code}
#* В настройках *<VirtualHost \*:443>* укажите правильные пути к сертификатам. Должно получиться приблизительно следующее: \\ \\
{code}<VirtualHost *:443>
DocumentRoot /var/wordpress/
AddDefaultCharset utf-8
<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}
*SSLCACertificateFile* \- путь к промежуточному сертификату
*SSLCertificateFile* \- путь к сертификату сайта
*SSLCertificateKeyFile* \- путь к файлу ключа сертификата \\ \\
# Скопируйте измененный файл конфигурации:
{code}
mkdir -p /app/asr_cabinet/cfg/etc/httpd/conf/
cp -p /app/asr_cabinet/etc/httpd/conf/httpd.conf /app/asr_cabinet/cfg/etc/httpd/conf/httpd.conf
{code}
{warning}После этого изменения в настройках личного кабинета по адресу <ip биллинга>:8081/settings/asr_cabinet/ не будут менять настройки веб-сервера{warning}
# Скопируйте сертификаты в директорию сертификатов:
{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
cp -p /tmp/ca_bundle.crt /app/asr_cabinet/cfg/etc/pki/tls/certs/ca_bundle.crt
cp -p /tmp/ca.crt /app/asr_cabinet/etc/pki/tls/certs/ca.crt
cp -p /tmp/ca_bundle.crt /app/asr_cabinet/etc/pki/tls/certs/ca_bundle.crt
{code}
# Скопируйте ключ для сертификата
{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
{code}
# Проверка корректности установки сертификата
Для проверки корректности установки сертификата необходимо перезапустить http сервер командой
{code}chroot /app/asr_cabinet/
/etc/init.d/httpd restart
{code}
Если сертификат установлен корректно, то у Вас отобразится следующее:
{panel}Останавливается httpd: \[ OK \]
Запускается httpd: \[ OK \]{panel}


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

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

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

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

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

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

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

h3. Отладка

Если при запуске *httpd* отображается сбой:
1. Необходимо проверить лог ошибок, который находится в */app/asr_cabinet/var/log/httpd/error_log.*
2. Провести проверку соответствия сертификата и ключа. Для проверки необходимо вычислить md5 хэш модуля каждого файла. Равенство хэша означает соответствие private key и сертификата

Вычисление хэша ключа выполняется под chroot /app/asr_cabinet/

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

Значения (stdin)= 342bd7490c3b79c8******* должны совпасть после выполнения обеих команд.