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

Skip to end of metadata
Go to start of metadata
Вы просматриваете старую версию данной страницы. Смотрите текущую версию. Сравнить с текущим  |   просмотр истории страницы
Время выполнения инструкции: до 15 минут начальная настройка, 2-3 минуты последующее обновление сертификата

Введение

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

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

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

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

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

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

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

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

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

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

RU-CENTER

https://www.nic.ru

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

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

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

Соответствие имён сертификатов от 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 - не нужен.

RapidSSL

https://www.rapidssl.com

COMODO

https://ssl.comodo.com

Если Вы используете сертификат от COMODO, вероятно Вам пришлют файл с цепочкой корневых сертификатов, или же несколько таких сертификатов в разных файлах.
Если их несколько, просто сохраните их содержимое в едином текстовом файле. В обоих случаях, в httpd.conf вместо переменной SSLCACertificateFile используйте SSLCertificateChainFile, например:

#SSLCACertificateFile /etc/pki/tls/certs/ca_bundle.crt
SSLCertificateChainFile /etc/pki/tls/certs/CA.ca-bundle

На всякий случай: Документация Comodo по установке SSL-сертификата в Apache

Let's Encrypt

https://letsencrypt.org

Выдержка из руководства "Приступая к работе" с сайта letsencrypt.org:
...Установите Certbot на ваш компьютер для запуска в ручном режиме. Загрузите специальный файл в папку сайта, чтобы подтвердить факт владения. Certbot создаст сертификат для доменного имени этого сайта, для последующей отправки на web-сервер...

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

  1. Настройте порты и включите 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']

      app['wordpress.sslport']='443'
      app['wordpress.use_ssl']='1'
    • Поменяйте порт Codeigniter на 8443

      app['apache.sslport']='8443'
      app['apache.sslip']='169.254.4.43'
      
    • Перезапустите asr_cabinet:

      /app/asr_cabinet/service restart
  2. Внесите изменения в конфигурационный файл Apache:
    /app/asr_cabinet/etc/httpd/conf/httpd.conf
    • В настройках <VirtualHost *:80> змените RewriteCond %{REQUEST_URI} ^/cabinet. на RewriteCond %{HTTPS} off чтобы HTTPS был включен глобально на сайт, а не только личный кабинет. Должно получиться приблизительно следующее:

      <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>
    • В настройках <VirtualHost *:443> укажите правильные пути к сертификатам. Должно получиться приблизительно следующее:

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

      SSLCACertificateFile - путь к промежуточному сертификату
      SSLCertificateFile - путь к сертификату сайта
      SSLCertificateKeyFile - путь к файлу ключа сертификата

  3. Скопируйте измененный файл конфигурации:
    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
    
    После этого изменения в настройках личного кабинета по адресу <ip биллинга>:8081/settings/asr_cabinet/ не будут менять настройки веб-сервера
  4. Скопируйте сертификаты в директорию сертификатов:
    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
    
  5. Скопируйте ключ для сертификата
    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
    
  6. Проверка корректности установки сертификата
    Для проверки корректности установки сертификата необходимо перезапустить http сервер командой
    chroot /app/asr_cabinet/
    /etc/init.d/httpd restart
    

    Если сертификат установлен корректно, то у Вас отобразится следующее:

    Останавливается httpd: [ OK ]
    Запускается httpd: [ OK ]

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

/app/asr_cabinet/service restart

Если в результате перезапуска все сервисы стартовали со статусом [ OK ], необходимо проверить корректность установки сертификата и переадресации на https при переходе в личный кабинет, например через браузер Firefox.

Используя браузер можно увидеть ошибки сертификата:

  • неверный сайт - вероятно, вы обращаетесь на сайт по ip, а сертификат выдан для домена. В комментарии вы увидите всю нужную информацию;

  • недоверенный сертификат - вероятно, вы не выгрузили серверный сертификат, либо выгрузили вместо него другой сертификат;

  • просроченный сертификат - вышел срок действия сертификата, нужно покупать новый.

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

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

openssl x509 -text -noout -in mucert ca.crt | grep -E 'Before|After'
  • Before - время начала действия
  • After - время окончания действия

Отладка

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

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

openssl rsa -modulus -noout -in /etc/pki/tls/private/ca.key | openssl md5

Вычисление хэша сертификата

openssl x509 -modulus -noout -in /cfg/etc/pki/tls/certs/ca.crt | openssl md5

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

Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.