zaLinux.ru

Ошибка «ERR_SSL_PROTOCOL_ERROR» (РЕШЕНО)


Оглавление

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.3 Как сделать так, чтобы локальный сервер открывался по имени хоста (настройка разрешения имени хоста в IP адрес)

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 соединение также отмечено как безопасное:


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *