Назад | Перейти на главную страницу

Настольный компьютер Chrome и Android отказываются принимать доверенный самозаверяющий сертификат

Я создал самозаверяющий сертификат, используя следующую команду с помощью OpenSSL 1.1.1b (26 февраля 2019 г.):

openssl req -nodes -new --days 900 -subj /CN=192.168.0.104:8080 -x509 -keyout server.key -out server.crt

Затем я использовал окна ммс импортировал полученный файл server.crt в Корень консоли -> Сертификаты - Текущий пользователь -> Доверенные корневые центры сертификации -> Сертификаты

Когда я перехожу на страницу в chrome tho по адресу 192.168.0.104:8080, он сообщает мне, что страница «Небезопасна» (хотя, если я смотрю на информацию о сертификате, в статусе сертификата в разделе «Путь сертификации» указано «Этот сертификат в порядке».

Я проделал аналогичный процесс на своем телефоне Android, загрузив его на свой телефон, добавив сертификат в раздел настроек шифрования и учетных данных.

Однако когда я перехожу на страницу, она сообщает мне, что «сертификат сервера не соответствует URL-адресу».

Что я здесь делаю не так?

Обновить:

Сейчас я использую req.conf

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = CA
L = Belmont
O = N/A
OU = N/A
CN = 192.168.0.104
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.0 = localhost
IP.0 = 192.168.0.104

И создаем сертификат и ключ с помощью:

openssl req -x509 -nodes -days 999 -newkey rsa:2048 -keyout server.key -out server.crt -config req.conf

Затем я перезапустил хром в Windows (я не могу поверить, что перезапуск программ, чтобы настройки вступили в силу, все еще необходимо в 2019 году). Windows Chrome тогда распознает это нормально.

Однако на Android я даже не могу установить этот сертификат - он говорит мне: «Для установки сертификата требуется закрытый ключ». Это еще больше сбивает с толку.

  1. Chrome требует SAN. Вот уже два года, как Chrome использует расширение альтернативного имени сервера (SAN) в сертификате, а НЕ атрибут CommonName (CN) в теме, как это было в прошлом веке. (Другие браузеры, все TTBOMK и почти все клиенты сегодня предпочитаю SAN, но при необходимости вернется к Subject CN; Chrome не будет.) Вы не говорите нам, что находится в вашем файле конфигурации OpenSSL или какую версию вы используете. OpenSSL 1.1.1 теперь имеет параметр командной строки -addext к req -new -x509, но в противном случае вам нужно установить SAN в файле конфигурации хотя бы логически - хотя в Unix, а я верить WSL, вы можете заставить оболочку создать этот файл конфигурации как автоматический временный файл с <(commands) (или в zsh =(commands)). Видеть:

Создание самозаверяющего сертификата с помощью openssl, который работает в Chrome 58
Не удается избавиться от ошибки net :: ERR_CERT_COMMON_NAME_INVALID в Chrome с самозаверяющими сертификатами
https://security.stackexchange.com/questions/172440/generate-x509-err-cert-common-name-invalid
https://security.stackexchange.com/questions/74345/provide-subjectaltname-to-openssl-directly-on-command-line
https://security.stackexchange.com/questions/158632/burp-suite-although-my-configurations-are-correct-still-chrome-doesnt-allows

но обратите внимание, что эти вопросы касаются сертификата для имени домена, который использует DNS типа записи SAN; для IP-адреса вам необходимо использовать IP.

  1. Опустите порт. Даже для браузеров / клиентов, которые все еще используют Subject CN, это должно быть имя хоста или IP-адрес. без порт. (Для SAN вы не можете ошибиться, потому что синтаксис SAN только разрешает DNS: dommainname или IP: IPv4or8addr и без порта.)

PS: 8080 обычно используется для альтернативного HTTP, а 8443 - для альтернативного HTTPS. Использование 8080 для HTTPS сбивает с толку.