Вопрос или проблема
В интернете много вопросов, где люди испытывают сложности с настройкой самоподписанных сертификатов для использования в локальной сети.
Вот несколько ссылок:
Как заставить Chrome принять самоподписанный сертификат localhost
Chrome принимает самоподписанный сертификат localhost
Создание самоподписанного сертификата с помощью openssl, который работает в Chrome 58
Ошибка сертификата StartCom: ERR_CERT_AUTHORITY_INVALID
Я просмотрел все эти вопросы, но все еще не могу избавиться от ошибки (net::ERR_CERT_COMMON_NAME_INVALID).
Следуемые шаги:
-
Генерация ключа и сертификата на сервере
openssl req \ -newkey rsa:2048 \ -x509 \ -nodes \ -keyout file.key \ -new \ -out file.crt \ -subj /CN=Hostname \ -reqexts SAN \ -extensions SAN \ -config <(cat /etc/ssl/openssl.cnf \ <(printf '[SAN]\nsubjectAltName=DNS:192.168.0.1')) \ -sha256 \ -days 3650
-
Настройка серверного процесса (apache) для использования вновь сгенерированного сертификата и ключевого файла для безопасных соединений
- Экспорт файла сертификата с сервера на клиент, перейдя по адресу https://192.168.0.1:3122 через Chrome Dev Tools и используя опцию Экспорт
- Добавление CA в список известных Удостоверяющих центров (на Fedora 26) с помощью
certutil
sudo cp file.crt /etc/pki/ca-trust/source/anchors; sudo upate-ca-trust
- Перезапуск chrome
Я также пробовал разные значения для поля CN
, такие как: hostname
, common.name.com
, Common Name
, 192.168.0.1
Даже после всего этого ошибка сохраняется, когда я перехожу по адресу https://192.168.0.1:3122, и я уже не знаю, что делать.
Текстовое представление выглядит следующим образом:
Сертификат:
Данные:
Версия: 3 (0x2)
Серийный номер:
9e:ae:33:24:3a:2d:2b:e2
Алгоритм подписи: sha256WithRSAEncryption
Издатель: CN = Hostname
Срок действия
Не раньше: 28 Окт 20:18:06 2017 GMT
Не позже : 26 Окт 20:18:06 2027 GMT
Тема: CN = Hostname
Информация о публичном ключе темы:
Алгоритм публичного ключа: rsaEncryption
Публичный ключ: (2048 бит)
Модуль:
00:a4:80:6c:3a:1b:5e:c4:e6:f6:7d:a5:be:d6:cd:
d9:23:bd:1a:b1:e6:f1:e3:b0:76:47:37:a3:d8:b0:
60:44:23:c3:8a:58:1c:c3:0a:99:3d:42:32:ca:8b:
ec:31:9d:a8:df:6c:13:43:e6:78:12:b8:24:04:5a:
9f:6e:11:24:2a:56:e3:20:36:78:a4:cc:ed:45:7c:
a3:c1:36:7b:25:f6:6b:2d:01:59:02:74:8b:7a:13:
ec:83:63:90:2e:a0:a3:aa:23:de:ea:f0:8e:1f:99:
b9:50:b1:5f:64:e4:c9:91:c0:0c:56:15:3c:c0:ff:
0f:bf:e1:af:7a:bf:51:40:37:b0:34:20:95:a1:05:
14:k2:35:20:e8:98:48:65:ad:26:cc:de:a2:50:48:
77:8c:e2:7a:d5:bd:83:96:86:ef:20:79:2f:15:a3:
07:48:f4:1f:c7:9d:a1:4b:bd:ee:47:83:51:f3:09:
27:ed:b7:09:c8:56:40:0c:68:25:92:d8:62:dc:14:
6c:fa:f1:e3:93:1b:79:3c:58:9c:53:69:ff:6a:0f:
ee:4c:9f:8e:22:2d:62:6b:b3:ae:22:d6:e3:d0:bd:
06:43:a7:c3:e1:1e:23:07:61:b0:4e:64:14:92:0c:
5b:f1:a8:c5:29:67:64:7d:65:10:b9:60:41:b8:3b:
1y:1f
Экспонента: 65537 (0x10001)
Расширения X509v3:
X509v3 Альтернативное имя субъекта:
DNS:192.168.0.1
Алгоритм подписи: sha256WithRSAEncryption
11:65:6d:86:04:7f:5a:b0:ce:b2:6e:95:7e:03:8c:fe:a9:d0:
81:2c:6f:50:63:2e:91:77:79:cd:27:32:b0:19:2b:ac:ea:c0:
4b:f7:56:d9:be:34:54:f1:a6:1d:bc:d0:3b:bb:bf:90:0e:2d:
1d:83:28:97:8e:f8:37:5d:3e:00:5a:cd:3d:36:5d:c4:5d:a8:
7e:a4:59:f0:91:3d:af:3d:28:03:3e:78:3b:5b:0a:fb:24:34:
02:a2:09:ec:d6:0c:58:63:ab:69:26:5e:fe:1d:1f:19:54:0f:
68:4e:31:f9:de:1e:de:86:81:3f:b7:62:c5:67:02:05:a2:7a:
03:f4:b5:3b:ba:c4:ba:26:8e:a2:ee:1c:ef:69:63:07:b0:97:
fd:a8:42:e2:11:6d:de:b5:70:a5:4a:62:d2:62:d9:5b:17:f4:
d5:cd:6f:71:75:dd:35:33:55:52:2e:30:29:f8:42:ec:b9:d3:
82:85:a1:e7:f6:f5:90:dd:cb:07:15:a7:44:70:1c:93:e6:ec:
03:3a:be:41:87:3c:f0:a4:88:a5:65:d9:29:2c:78:de:90:b8:
6a:8b:99:6e:d0:e5:8c:08:a4:71:51:fd:1d:e1:8c:0c:17:d5:
b0:31:fc:7f:99:23:dd:1a:c4:0b:45:17:68:88:67:c6:22:df:
2b:ac:ea:c0
Обратите внимание, что это мой первый опыт настройки SSL/TLS сертификатов для таких целей. Пожалуйста, подскажите, как избавиться от ошибки.
Chrome 58+ больше не проверяет общее имя (CN
) в сертификатах.
Теперь он использует альтернативные имена субъекта (SAN
) вместо этого.
SAN
должен содержать правильную запись DNS
или IP
.
- Когда используется DNS, это должно быть разрешаемое имя FQDN.
- Когда используется IP-адрес, он должен быть явно указан как
таковой в цепочкеSAN
.
С учетом сказанного, это должно сработать :
openssl req \
-newkey rsa:2048 \
-x509 \
-nodes \
-keyout file.key \
-new \
-out file.crt \
-subj /CN=Hostname \
-reqexts SAN \
-extensions SAN \
-config <(cat /etc/ssl/openssl.cnf \
<(printf '[SAN]\nsubjectAltName=DNS:hostname,IP:192.168.0.1')) \
-sha256 \
-days 3650
В дополнение к ответу krisFR, новые версии OpenSSL поддерживают ввод альтернативного имени субъекта напрямую, что делает команду еще короче:
openssl req \
-newkey rsa:2048 \
-x509 \
-noenc \
-keyout file.key \
-new \
-out file.crt \
-subj /CN=Hostname \
-addext 'subjectAltName=DNS:hostname,IP:127.0.0.1' \
-sha256 \
-days 3650
Ответ или решение
Для решения проблемы с ошибкой net::ERR_CERT_COMMON_NAME_INVALID
в Google Chrome при использовании самоподписанных сертификатов, необходимо удостовериться, что сертификат корректно настроен и включает все необходимые параметры. В последние версии Chrome акцент был сделан на использовании полей Subject Alternative Name (SAN), что делает поле Common Name (CN) менее значимым.
Шаги для исправления ошибки:
-
Генерация сертификата с правильными параметрами:
Убедитесь, что при генерации сертификата вы используете правильный синтаксис для указания SAN. Вот пример команды OpenSSL, которая правильно добавляет и DNS, и IP адреса в SAN:openssl req \ -newkey rsa:2048 \ -x509 \ -nodes \ -keyout file.key \ -new \ -out file.crt \ -subj /CN=hostname \ -addext 'subjectAltName=DNS:hostname,IP:192.168.0.1' \ -sha256 \ -days 3650
В этой команде
hostname
— это ваше доменное имя, а192.168.0.1
— это ваш IP-адрес. Убедитесь, что эти значения соответствуют используемым вами. -
Настройка веб-сервера:
Убедитесь, что ваш веб-сервер (например, Apache) настроен на использование вновь созданных файловfile.crt
иfile.key
для SSL-соединений. Конфигурация может выглядеть следующим образом:<VirtualHost *:3122> ServerName hostname SSLEngine on SSLCertificateFile /path/to/file.crt SSLCertificateKeyFile /path/to/file.key </VirtualHost>
-
Добавление сертификата в доверенные на клиенте:
Если вы работаете на клиентской машине (например, Fedora 26), вам нужно добавить сертификат в список доверенных. Внимательно выполните следующие шаги:sudo cp file.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust
-
Перезагрузка браузера:
После выполнения всех вышеперечисленных действий обязательно перезапустите Google Chrome. -
Проверка конфигурации:
Чтобы проверить, правильно ли настроен ваш сертификат, вы можете использовать утилитуopenssl
:openssl x509 -in file.crt -text -noout
Убедитесь, что в выводе присутствуют правильные поля
DNS
иIP
в расширенииSubject Alternative Name
.
Заключение
Если после выполнения всех этих шагов ошибка все еще сохраняется, то проверьте, что URL, который вы используете (например, https://192.168.0.1:3122
), соответствует значениям, указанным в сертификате. Обратите внимание, что как DNS, так и IP в SAN должны быть правильно указаны.
Если вы следовали всем рекомендациям и все еще сталкиваетесь с проблемами, возможно, стоит временно попробовать изменить настройки безопасности в Chrome (например, запустить с параметром --ignore-certificate-errors
), чтобы понять, может ли проблема быть связана с конфигурацией. Но помните, что это лишь временное решение для диагностики проблемы.