Установка SSL в Open Server и его настройка

В разработке, я постоянно использую локальный Open Server (OSpanel) и нахожу его очень удобным из-за его гибких настроек и обилия различных модулей. Однако, в каждой новой версии остается одна проблема — отсутствие настроек SSL сертификатов. Поэтому далее, я покажу как можно в open server установить SSL

Open Server и SSL — в чем проблема?

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

Я долго искал ответы как настроить сертификат, и в итоге нашел решение, которое позволит все реализовать, без каких-либо последствий. Я даже прибегал к стандартным способам установки сертификатов через Let’s Encrypt и т.п, но это также не решило проблем.

Генерация SSL в OpenServer

Итак, теперь по шагам:

  • Создаем где-нибудь *.cmd файл. Я назвал его cert_gen.cmd. Вы можете назвать его как хотите;
  • В файле cert_gen.cmd прописываем следующий код:
@echo OFF
rem УКАЖИТЕ ПРАВИЛЬНЫЕ РАСПОЛОЖЕНИЯ ФАЙЛОВ
set OPENSSL_CONF=F:\openserver\modules\http\Apache-2.4\conf\openssl.cnf
PATH=%PATH%;F:\openserver\modules\http\Apache-2.4\bin

rem Количество дней действия сертификата
set days=730
set key_bits=2048

rem Наименование домена, для которого создаётся сертификат
set dname=somesite.com

rem УКАЖИТЕ ПРАВИЛЬНЫЕ РАСПОЛОЖЕНИЯ ФАЙЛОВ
rem Расположение корневого сертификата и ключа
set root_cert=F:\openserver\userdata\config\cert_files\rootCA.crt
set root_key=F:\openserver\userdata\config\cert_files\rootCA.key

echo [trust_cert] > %dname%.cnf
echo subjectAltName=@alt_names >> %dname%.cnf
echo keyUsage=digitalSignature,keyEncipherment,dataEncipherment >> %dname%.cnf
echo extendedKeyUsage=serverAuth,clientAuth >> %dname%.cnf
echo [alt_names] >> %dname%.cnf
echo DNS.1 = %dname% >> %dname%.cnf

openssl genrsa -out %dname%.key %key_bits%

openssl req -sha256 -new -utf8 -key %dname%.key -out %dname%.csr -subj /emailAddress="info\@ospanel\.io"/C=RU/stateOrProvinceName="Russian Federation"/L=Moscow/O="Open Server Panel"/OU=Software/CN=%dname%:3000

rem Для создания сертификата, подписанного доверенным сертификатом
openssl x509 -sha256 -req -days %days% -in %dname%.csr -extfile %dname%.cnf -extensions trust_cert -CA %root_cert% -CAkey %root_key% -out %dname%.crt

openssl x509 -in %dname%.crt -noout -purpose

rem Удаление временных файлов
del %dname%.csr
del %dname%.cnf

pause
  • Пройдитесь по коду файла и исправьте, где необходимо пути к файлам и доменное имя локального сайта. Также, убедитесь в наличии всех файлов перечисляемых по коду.;
  • Открываем консоль (win + R -> cmd ) и запускаем cert_gen.cmd файл. В итоге вы получите 2 файла — *.crt и *.key. В моем случае это — somesite.com.crt и somesite.com.key;
  • Где-нибудь создаем новую папку, которую называем доменным именем ( в моем случае из кода выше — somesite.com, у вас естественно будет свое название ) и перемещаем туда сгенерированные ранее файлы ;
  • Переходим в OpenServer\userdata\config\ и создаем там директорию — cert_files ;
  • Перемещаем в созданную выше директорию, папку с доменным именем из предыдущего шага;
  • Переходим в папку сайта ( в моем случае — OpenServer\domains\somesite.com ) и добавляем туда файл Apache-2.4_vhost.conf или Nginx-1.10_vhost.conf . В зависимости от того Apache у вас или Nginx — укажите правильное имя + измените версию. К слову, имя и версию можно посмотреть в настройках опен сервера — Open Server -> Настройки -> Модули;
  • В созданном выше файле прописываете следующий код:
#-----------------------------------------------#
# Начало блока конфигурации HTTP хоста
#-----------------------------------------------#

<VirtualHost *:%httpport%>

    DocumentRoot    "%hostdir%"
    ServerName      "%host%"
    ServerAlias     "%host%" %aliases%
    ScriptAlias     /cgi-bin/ "%hostdir%/cgi-bin/"

</VirtualHost>

#-----------------------------------------------#
# Конец блока конфигурации HTTP хоста
#-----------------------------------------------#

#-----------------------------------------------#
# Начало блока конфигурации HTTPS хоста
#-----------------------------------------------#

<IfModule ssl_module>
<VirtualHost *:%httpsport%>

    DocumentRoot    "%hostdir%"
    ServerName      "%host%"
    ServerAlias     "%host%" %aliases%
    ScriptAlias     /cgi-bin/ "%hostdir%/cgi-bin/"

    SSLEngine       on
    #Header always set          Strict-Transport-Security "max-age=94608000"

    #SSLCACertificateFile       ""
    #SSLCertificateChainFile    ""

    SSLCertificateFile          "%sprogdir%/userdata/config/cert_files/somesite.com/somesite.com.crt"
    SSLCertificateKeyFile       "%sprogdir%/userdata/config/cert_files/somesite.com/somesite.com.key"


    SetEnvIf User-Agent ".*MSIE [1-5].*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

    SetEnvIf User-Agent ".*MSIE [6-9].*" \
    ssl-unclean-shutdown

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions              +StdEnvVars
    </FilesMatch>

    <Directory "%hostdir%/cgi-bin/">
        SSLOptions              +StdEnvVars
    </Directory>

</VirtualHost>
</IfModule>



#-----------------------------------------------#
# Конец блока конфигурации HTTPS хоста
#-----------------------------------------------#
  • Пройдитесь по коду файла и исправьте, где необходимо пути к файлам и доменное имя локального сайта. Вы также можете взять код-шаблон этого файла из директории OpenServer\userdata\config\. Там же перечислены все шаблоны для *.conf файлов;
  • После этого, перейдите в настройки Open Server и во вкладке Домены, убедитесь, что в поле Управления доменами, у вас выбран в выпадающем списке «Автопоиск»;
  • Перезапустите Open Server;
  • Откройте свой сайт через https://.

Сертификат создается на 730 дней, но вы можете установить в настройках файла cert_gen.cmd например 99999 дней и после этого забыть о перевыпуске нового сертификата.

Подписаться на новые статьи