Оглавление
1. Почему возникает ошибка ERR_SSL_PROTOCOL_ERROR
2. Как исправить ошибку ERR_SSL_PROTOCOL_ERROR
3. Как исправить «ERR_SSL_PROTOCOL_ERROR» на локальном веб-сервере
4. Как настроить HTTPS на Apache в Linux
4.1 Как установить Apache и OpenSSL в Debian, Ubuntu, Linux Mint, Kali Linux
4.2 Как включить модуль SSL для Apache
4.4 Как создать Центр Сертификации (CA)
4.5 Как создать сертификат для HTTPS (генерация самоподписанного сертификата сайта)
4.6 Куда скопировать сертификаты для Apache в Debian, Ubuntu, Linux Mint
4.7 Как настроить Apache для работы с SSL сертификатами
4.8 Как добавить локальный Центр Сертификации (CA) в доверенные
Почему возникает ошибка ERR_SSL_PROTOCOL_ERROR
Ошибка «ERR_SSL_PROTOCOL_ERROR» возникает если был включён (активирован) модуль SSL для Apache, но при этом не были (правильно) настроены хосты для работы по протоколу HTTPS. В этом состоянии сервер Apache уже прослушивает порт 443, но не способен правильно обрабатывать HTTPS запросы.
Полный текст ошибки:
This site can’t provide a secure connection hackware.local sent an invalid response. ERR_SSL_PROTOCOL_ERROR
То есть скорее всего, не настроен и не подключён виртуальный хост, предназначенный для обработки HTTPS запросов. Чтобы в этом убедиться, выполните следующую команду, которая выведет список виртуальных хостов Apache:
apachectl -t -D DUMP_VHOSTS
Как исправить ошибку ERR_SSL_PROTOCOL_ERROR
Если вы получили ошибку ERR_SSL_PROTOCOL_ERROR при попытке открыть сайт в Интернете, то попробуйте открыть этот же сайт по протоколу HTTP — ваше соединение до сайта будет не зашифрованным, но вы хотя бы сможете просмотреть интересующую вас веб-страницу.
Как исправить «ERR_SSL_PROTOCOL_ERROR» на локальном веб-сервере
Чтобы исправить эту ошибку нужно правильно настроить веб-сервер для работы с протоколом HTTPS. И если для сайтов в Интернете этот вариант не подходит (конечно, если это не ваш сайт), то на локальном компьютере вы можете исправить эту проблему.
Ниже дан пошаговый мануал, как настроить Apache для работы с HTTPS. Данная инструкция подойдёт для Debian и дистрибутивов основанных на Debian, примеры таких дистрибутивов: Ubuntu, Linux Mint, Kali Linux.
Если вы уже пытались настроить HTTPS на Apache, то следующая подробная инструкция поможет вам найти причину ошибки в ваших настройках, которые вызывают ERR_SSL_PROTOCOL_ERROR, либо вы можете просто начать всё заново.
Как настроить HTTPS на Apache в Linux
Как установить Apache и OpenSSL в Debian, Ubuntu, Linux Mint, Kali Linux
Начнём с установки пакетов Apache и OpenSSL. OpenSSL нам понадобиться для генерации самоподписанных сертификатов.
Возможно, эти пакеты уже присутствуют в вашей системе. При необходимости установите их следующими командами:
sudo apt update sudo apt install apache2 openssl
Для проверки работы сервера, запустите службу:
sudo systemctl start apache2.service
Откройте в веб-браузере адрес http://localhost/ - вы должны увидеть дефолтную страницу Apache в Debian.
Чтобы служба веб-сервера автоматически запускалась после перезагрузки компьютера, вы можете добавить её в автозагрузку следующей командой:
sudo systemctl enable apache2.service
Как включить модуль SSL для Apache
Начнём с подключения модуля SSL для Apache. Это делается командой:
sudo a2enmod ssl
Как сделать так, чтобы локальный сервер открывался по имени хоста (настройка разрешения имени хоста в IP адрес)
Придумайте имя хоста. Вы можете выбрать любое имя — из одного или нескольких слов, разделённых точкой. Причём если вы выберите имя вида:
ANYTHING.localhost
Например:
hackware.localhost
То вам даже не придётся настраивать преобразование имени хоста в IP, поскольку имена содержащие «.localhost» автоматически перенаправляются на localhost.
Вы можете кликнуть следующую ссылку и, если вы запустили Apache, то она откроет ваш локальный веб-сервер: http://hackware.localhost/
Если вы хотите имя без «.localhost» (например, hackware.local), то нужно настроить преобразование имени в IP адрес. Для этого мы добавим запись в файл /etc/hosts.
Я буду использовать в качестве доменного имени (адреса локального веб-сайта) hackware.local. Чтобы это имя указывало на веб-сервер, я в файл /etc/hosts
sudo gedit /etc/hosts
добавляю следующую строку (замените hackware.local на выбранное доменное имя):
127.0.0.1 hackware.local
Сразу после этого вы можете в веб-браузере подключиться к веб-серверу используя доменное имя http://hackware.local (но пока только по протоколу HTTP).
Как создать Центр Сертификации (CA)
В начале мы создадим ключи Центра Сертификации (Certificate Authority, CA). Это нужно сделать только один раз. Не смотря на громкое название «Центр Сертификации», мы двумя командами создадим ключ и сертификат (пару приватный и публичный ключ) — вот и всё. Эти ключи можно создать в любом месте, например, я создал папку myCA, в которой они будут храниться:
mkdir myCA cd myCA
Теперь создайте приватный и публичный ключ Центра Сертификации следующими командами:
openssl genpkey -algorithm RSA -out rootCA.key openssl req -x509 -new -noenc -key rootCA.key -sha256 -days 1024 -out rootCA.crt
Во время выполнения второй команды у вас будут запрашиваться различные сведения — неважно, что вы введёте, это ни на что не влияет для наших тестовых целей. Вы можете просто на все запросы нажимать клавишу Enter.
Файл rootCA.crt — это сертификат, содержащий публичный ключ. Этот файл не является секретным и он нам понадобится для добавления нашего Центра Сертификации (CA) в доверенные, чтобы операционная система доверяла подписанным сертификатам.
Файл rootCA.key должен хранится в секрете — с его помощью можно создавать сертификаты, которые будут восприниматься вашей операционной системой как подписанные доверенным Центром Сертификации.
Как создать сертификат для HTTPS (генерация самоподписанного сертификата сайта)
Следующими командами я создаю приватный ключ и сертификат веб-сайта. В этих командах вы можете поменять имена ключей (например, заменить hackware.local на имя вашего домена) — но имена файлов ни на что не влияют — вы можете использовать любые:
openssl genpkey -algorithm RSA -out hackware.local.key openssl req -new -key hackware.local.key -out hackware.local.csr
После выполнения второй команды у вас опять будут запрашиваться различные сведения — как и в предыдущий раз, почти все из них можно не вводить, за исключением одного поля:
Common Name (e.g. server FQDN or YOUR name) []:
В этом поле укажите ваш локальный домен, например:
hackware.local
Также придумайте и запомните пароль для ввода в следующее поле (можно пропустить):
A challenge password []:
Создайте файл extraoptions.ext со следующим содержимым (вместо hackware.local укажите ваш домен):
subjectAltName = DNS:*.hackware.local, DNS:hackware.local
Обратите внимание, что домен указывается дважды — со звёздочкой и без. Это делается для того, что сертификат работал как для основного домена, так и для всех его поддоменов.
На самом деле, вы можете ещё указать и IP адреса (в том числе IPv6) — если вы это сделаете, то сертификат также будет действителен и для данных IP адресов. Пример файла extraoptions.ext с IP адресами:
subjectAltName = DNS:*.hackware.local, DNS:hackware.local, IP:192.168.1.37, IP:2001:fb1:139:3995:da89:dbdf:1e9a:eb84
Чтобы узнать IP адреса вашего компьютера с Linux, используйте следующую команду:
ip a
Примечание: если вы не настроили использование статического IP адреса, после перезагрузки компьютера ваши IP адреса, скорее всего, изменятся.
Последней командой подписываем сертификат:
openssl x509 -req -in hackware.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out hackware.local.crt -days 500 -sha256 -extfile extraoptions.ext
В результате было создано три новых файла:
hackware.local.crt hackware.local.csr hackware.local.key
Файл hackware.local.csr больше не нужен и вы можете его удалить.
Куда скопировать сертификаты для Apache в Debian, Ubuntu, Linux Mint
Скопируйте (или переместите) созданные сертификаты:
sudo cp hackware.local.crt /etc/ssl/certs/ sudo cp hackware.local.key /etc/ssl/private/
Как настроить Apache для работы с SSL сертификатами
В директории /etc/apache2/sites-available/ создайте файл с расширением .conf, например:
sudo gedit /etc/apache2/sites-available/hackware-ssl.conf
И скопируйте в него следующее содержимое:
<VirtualHost *:443> DocumentRoot "/var/www/html/" ServerName hackware.local ServerAdmin whatever@gmail.com LogLevel error # LogLevel info ssl:warn # You may like this instead of the previous one ErrorLog "/var/log/apache2/hackware.local-ssl-error_log" CustomLog "/var/log/apache2/hackware.local-ssl-access_log" combined SSLEngine on SSLCertificateFile "/etc/ssl/certs/hackware.local.crt" SSLCertificateKeyFile "/etc/ssl/private/hackware.local.key" <Directory /> Options +Indexes +FollowSymLinks +ExecCGI AllowOverride All </Directory> <FilesMatch "\.(?:cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost>
В этой конфигурации обратите особое внимание на настройки следующих директив:
- ServerName — выбранное доменное имя для локального сайта
- SSLCertificateFile и SSLCertificateKeyFile — пути до сертификата и приватного ключа. Если вы выбрали другие имена для ваших ключей, то измените их здесь.
Сохраните и закройте файл.
Теперь подключите новый виртуальный хост (обратите внимание, что имя конфигурационного файла может быть другим — это тот самый файл, который вы создали в директории /etc/apache2/sites-available/ чуть ранее):
sudo a2ensite hackware-ssl.conf
И перезагрузите настройки службы apache2:
sudo systemctl reload apache2
Чтобы проверить, что новый виртуальных хост действительно был добавлен, вы можете запустить следующую команду:
apachectl -t -D DUMP_VHOSTS
Теперь вы можете использовать протокол HTTPS для подключения к веб-серверу: https://hackware.local/
Но не всё так хорошо — веб-браузер не доверяет самоподписанному сертификату. Чтобы это исправить, нужно добавить созданный выше в этой инструкции Центр Сертификации в список доверенных.
Как добавить локальный Центр Сертификации (CA) в доверенные
Самоподписанному сертификату не доверяют ни браузеры, ни даже консольные утилиты. Чтобы браузеры стали доверять всем сертификатам, созданным с помощью локального Центра Сертификации, нужно сделать следующее.
1) Создайте файл CAtoCert9.sh и сохраните в него следующее содержимое:
#!/bin/bash certfile="/home/mial/myCA/rootCA.crt" certname="HackWare CA" for certDB in $(find ~/ -name "cert9.db") do certdir=$(dirname ${certDB}); certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:${certdir} done
В этом файле измените значение certfile на путь до файла до вашего сертификата и значение certname на имя вашего сертификата (можете выбрать любое — это имя понадобится если вы захотите удалить сертификат), сохраните и закройте файл.
2) Затем запустите его следующим образом:
bash CAtoCert9.sh
Если вы захотите удалить ваш Центр Сертификации из доверенных, то создайте файл CAfromCert9.sh и скопируйте в него следующее:
#!/bin/bash certname="HackWare CA" for certDB in $(find ~/ -name "cert9.db") do certdir=$(dirname ${certDB}); certutil -D -d sql:${certdir} -n "${certname}" done
В этом файле измените значение certname на имя вашего сертификата, сохраните и закройте файл.
Затем запустите его следующим образом:
bash CAfromCert9.sh
Проверим страницу локального веб-сервера по протоколу HTTPS в различных веб-браузерах. В веб-браузере Firefox соединение отмечено как безопасное:
В веб-браузере Chromium соединение также отмечено как безопасное:
Связанные статьи:
- Ошибка «Error code: SSL_ERROR_RX_RECORD_TOO_LONG» (РЕШЕНО) (100%)
- Ошибка «net::ERR_CERT_COMMON_NAME_INVALID» для самоподписанного сертификата (РЕШЕНО) (76.5%)
- Ошибка «Error code: SSL_ERROR_BAD_CERT_DOMAIN» для самоподписанного сертификата (РЕШЕНО) (76.5%)
- Как добавить Subject Alternative Name (subjectAltName) в самоподписанный сертификат (73.5%)
- Как настроить HTTPS на Apache в Debian, Ubuntu, Linux Mint, Kali Linux (67.2%)
- Ошибка «Warning: Unknown: open_basedir restriction in effect.» (РЕШЕНО) (RANDOM - 18.6%)