В разработке, я постоянно использую локальный 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 дней и после этого забыть о перевыпуске нового сертификата.