Проблема
На локальном (дев-) сервере, при работк с
OSPanel / OpenServer
– не устанавливается https сертифкат он вроде тут и не нужен).Однако антифирус касперского считает иначе, и постоянно пытается разоврвать соединение с “небезопасным сайтом” (во всплывающем окне).
Со временем, эти кликанья надоедают и хочется от них избавиться, установив локальный сертификат SSL…
Решение
#1 Устанавливаем утилиту mkcert
В официальном репозитории есть инструкции для разных систем, но так как мы хотим установить сертификаты для OpenServer
, значит у нас — Windows
.
Для установки на Windows сначала понадобится установленный Chocolatey или Scoop.
Внимание: здесь и далее запускаем консоль от имени администратора: см. запуск консоли на картинке ниже.
Устанавливанем Chocolatey: https://chocolatey.org/install#individual
# Setup chocolatey
# check rights - OK
Get-ExecutionPolicy
RemoteSigned
# setup
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
В зависимости от выбранного пакетного менеджера (используем Chokolatey) запускаем в терминале одну из следующих команд:
# Chocolatey
choco install mkcert
После установки можно проверить успешность, активировав команду mkcert
.
Затем запустить команду:
mkcert -install
#2 Создаём сертификаты для доменов
- Переходим в директорию
C:\OSPanel\userdata\config\cert_files
(у вас путь может отличаться) и запускаем из неё терминал.
cd C:\OSPanel\userdata\config\cert_files
- Запускаем команду
mkcert %имядомена%
. Через пробел можно указать все домены, которые вам нужны, напримерmkcert example.local wpsite.develop test.local myblog.localhost
mkcert teleparser
Created a new certificate valid for the following names 📜
- "teleparser"
The certificate is at "./teleparser.pem" and the key at "./teleparser-key.pem" ✅
It will expire on 14 June 2027 🗓
- В директории появятся сгенерированные файлы сертификатов.
ls
Каталог: D:\OSPanel\userdata\config\cert_files
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 23.12.2016 13:55 424 dhparam.pem
-a---- 23.12.2016 13:54 1090 rootCA.crt
-a---- 23.12.2016 13:54 1708 rootCA.key
-a---- 23.12.2016 13:54 17 rootCA.srl
-a---- 23.12.2016 13:54 973 server.crt
-a---- 23.12.2016 13:54 891 server.csr
-a---- 23.12.2016 13:54 1675 server.key
-a---- 14.03.2025 17:59 1708 teleparser-key.pem
-a---- 14.03.2025 17:59 1639 teleparser.pem
#3 Вносим изменения в конфигурацию сервера
Узнать, какой сервер у вас локально установлен (nginx или apache) – можно так (у меня – Nginx 1.23
):
Настройка для Nginx
В Nginx настройка SSL-сертификата выполняется в конфигурационном файле сервера. В отличие от Apache, Nginx не использует директивы вроде <IfFile>
, но вы можете указать пути к сертификату и ключу напрямую в блоке server
.
Вот пример, как это можно сделать:
server {
listen 443 ssl;
server_name your_domain.com;
# Пути к SSL-сертификату и ключу
ssl_certificate /path/to/your/certificate/%host%.pem;
ssl_certificate_key /path/to/your/private/key/%host%-key.pem;
# Дополнительные настройки SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Другие настройки сервера
...
}
Правим наш файл D:\OSPanel\userdata\config\Nginx_1.23_vhost.conf
: создаем новый блок с настройками конкретно под наш домен с SSL (внизу):
# Блок для всех хостов по HTTP
server {
}
# Блок для хоста с SSL по HTTPS
server {
listen 443 ssl;
server_name teleparser;
ssl_certificate %sprogdir%/userdata/config/cert_files/teleparser.pem;
ssl_certificate_key %sprogdir%/userdata/config/cert_files/teleparser-key.pem;
#ssl_trusted_certificate '';
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root %sprogdir%/userdata/domains/teleparser;
index index.html index.php;
}
}
Пояснение
- ssl_certificate: Указывает путь к файлу сертификата (в вашем случае это
%host%.pem
). - ssl_certificate_key: Указывает путь к файлу приватного ключа (в вашем случае это
%host%-key.pem
). - ssl_protocols: Определяет поддерживаемые версии протокола SSL/TLS.
- ssl_ciphers: Определяет набор шифров, которые будут использоваться.
- ssl_prefer_server_ciphers: Указывает, что сервер должен выбирать шифры, а не клиент.
Примечание
- В Nginx нет аналога директивы
<IfFile>
из Apache. Если вам нужно проверить существование файла перед использованием, это можно сделать с помощью скриптов или условий на уровне операционной системы перед запуском Nginx. - Убедитесь, что пути к файлам сертификата и ключа указаны правильно и доступны для чтения процессом Nginx.
Настройка для Apache
- Переходим на уровень выше в каталог
C:\OSPanel\userdata\config
и открываем в редакторе файл нужного (активного у вас) модуля Apache%версия модуля%_vhost.conf
в моём случае, например, этоApache_2.4-PHP_8.0-8.1_vhost.conf
- Находим строку, начинающуюся с
SSLEngine on
SSLEngine on #Protocols http/1.1 #Header always set Strict-Transport-Security "max-age=94608000" #SSLCACertificateFile "" #SSLCertificateChainFile "" SSLCertificateFile "%sprogdir%/userdata/config/cert_files/server.crt" SSLCertificateKeyFile "%sprogdir%/userdata/config/cert_files/server.key"
и модифицируем её таким образом
<IfFile "%sprogdir%/userdata/config/cert_files/%host%.pem"> SSLEngine on #Protocols http/1.1 #Header always set Strict-Transport-Security "max-age=94608000" #SSLCACertificateFile "" #SSLCertificateChainFile "" SSLCertificateFile "%sprogdir%/userdata/config/cert_files/%host%.pem" SSLCertificateKeyFile "%sprogdir%/userdata/config/cert_files/%host%-key.pem" </IfFile>
- Осталось перезагрузить сервер и готово!
- В дальнейшем, для добавления новых доменов, просто повторяем второй шаг и перезагружаем сервер.
- В дальнейшем, для добавления новых доменов, просто повторяем второй шаг и перезагружаем сервер.
- Не забываем настроить редирект с http на https: для этого в корень сайта добавляем файл .htaccess вида:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Нет Ответов