Создание самозаверяющего сертификата для домена и поддоменов - NET::ERR_CERT_COMMON_NAME_INVALID
Я следовал этому руководству по созданию подписанных SSL-сертификатов в Windows для целей разработки, и он отлично работал для одного из моих доменов (я использую файл hosts для имитации DNS). Тогда я подумал, что у меня много поддоменов, и это было бы проблемой для создания сертификата для каждого из них. Поэтому я попытался создать сертификат с использованием подстановочного знака в Common
поле, как предлагается в некоторых ответах на serverfault. Как это:
Common Name: *.myserver.net/CN=myserver.net
Однако после импорта этого сертификата в Trusted Root Certification Authority я получаю NET::ERR_CERT_COMMON_NAME_INVALID
ошибка в Chrome для основного домена и всех его поддоменов, например: https://sub1.myserver.net
а также https://myserver.net
,
Этот сервер не может доказать, что это myserver.net; его сертификат безопасности от *.myserver.net/CN=myserver.net.
Это может быть вызвано неверной конфигурацией или злоумышленником, перехватывающим ваше соединение.
Что-то не так в поле Common Name, которое вызывает эту ошибку?
7 ответов
Как сказал Рахул, это распространенная ошибка Chrome и OSX. У меня были подобные проблемы в прошлом. На самом деле я, наконец, устал от 2 (да, я знаю, что это не так много) дополнительных кликов при тестировании локального сайта для работы.
Что касается возможного обходного пути к этой проблеме [с использованием Windows], я бы использовал одну из многих доступных утилит для самоподписывания сертификатов.
Рекомендуемые шаги:
- Создать самоподписанный сертификат
- Импорт сертификата в диспетчер сертификатов Windows
- Импорт сертификата в диспетчере сертификатов Chrome
ПРИМЕЧАНИЕ. Шаг 3 решит проблему, возникшую после того, как Google исправит ошибку... учитывая, что время уже устарело, в обозримом будущем нет ETA.**
Столько, сколько я предпочитаю использовать Chrome для разработки, я недавно обнаружил в Firefox Developer Edition. который не имеет этой проблемы.
Надеюсь это поможет:)
В Chrome 58 прекращена поддержка сертификатов без альтернативных имен субъектов.
В дальнейшем это может быть еще одной причиной возникновения этой ошибки.
Обходной путь - добавить доменные имена, которые вы используете как "subjectAltName" (альтернативное имя субъекта X509v3). Это можно сделать, изменив конфигурацию OpenSSL (/etc/ssl/openssl.cnf
в Linux) и измените v3_req
раздел, чтобы выглядеть так:
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = myserver.net
DNS.2 = sub1.myserver.net
Имея это в виду, не забудьте использовать -extensions v3_req
переключаться при создании нового сертификата. (см. также Как я могу создать самозаверяющий сертификат с SubjectAltName, используя OpenSSL?)
Создайте openssl.conf
файл:
[req]
default_bits = 2048
default_keyfile = oats.key
encrypt_key = no
utf8 = yes
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = Cary
L = Cary
O = BigCompany
CN = *.myserver.net
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = myserver.net
DNS.1 = *.myserver.net
Запустите эту команду:
openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout app.key -out app.crt -config openssh.conf
Выходные файлы app.crt
а также app.key
работать на меня.
Ваш подстановочный знак *.example.com
не распространяется на корневой домен example.com
но охватит любой вариант на подобласти, такой как www.example.com
или же test.example.com
Предпочтительным методом является создание альтернативных имен субъектов, как в ответе Фабиана, но имейте в виду, что в настоящее время Chrome требует, чтобы общее имя было дополнительно указано в качестве одного из альтернативных имен субъектов (как это правильно продемонстрировано в его ответе). Я недавно обнаружил эту проблему, потому что у меня было общее имя example.com
с SAN www.example.com
а также test.example.com
, но получил NET::ERR_CERT_COMMON_NAME_INVALID
предупреждение от Chrome. Я должен был сгенерировать новый запрос на подпись сертификата с example.com
как общее имя и один из SAN. Тогда Chrome полностью доверял сертификату. И не забудьте импортировать корневой сертификат в Chrome как надежный орган для идентификации веб-сайтов.
Я думаю, что это может быть ошибка в Chrome. Давным-давно была похожая проблема: смотрите.
Попробуйте в другом браузере. Я думаю, что это должно работать нормально.
Для всех, кто сталкивается с этим и хочет рискнуть протестировать его, есть решение: перейдите в режим инкогнито в Chrome, и вы сможете открыть "Дополнительно" и нажать "Перейти к some.url".
Это может быть полезно, если вам нужно проверить какой-либо веб-сайт, который вы ведете сами, и просто тестировать как разработчик (и когда у вас еще не настроен надлежащий сертификат разработки).
Конечно, это НЕ ДЛЯ ЛЮДЕЙ, использующих веб-сайт в производстве, где эта ошибка указывает на проблему с безопасностью веб-сайта.
Если вы устали от этой ошибки. Вы можете заставить Chrome не так себя вести. Я не говорю, что это лучший способ, просто говорю, что это способ.
В качестве обходного пути можно создать раздел реестра Windows, чтобы позволить Google Chrome использовать commonName сертификата сервера для сопоставления имени хоста, если в сертификате отсутствует расширение subjectAlternativeName, при условии, что он успешно проверяет и связывается с локально установленным центром сертификации. сертификаты.
Тип данных: Boolean [Windows:REG_DWORD] Местоположение реестра Windows: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome Имя предпочтения Windows/Mac/Linux/Android: EnableCommonNameFallbackForLocalAnchors Значение: 0x00000001 (Windows), true(Linux), true (Android), (Mac) Чтобы создать раздел реестра Windows, просто выполните следующие действия:
Откройте Блокнот Скопируйте и вставьте следующее содержимое в блокнот Редактор реестра Windows версии 5.00
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Google \ Chrome] "EnableCommonNameFallbackForLocalAnchors" = dword: 00000001 Перейдите в Файл> Сохранить как имя файла: any_filename.reg Сохранить как тип: Все файлы
Выберите предпочтительное место для файла
Нажмите на Сохранить
Дважды щелкните по сохраненному файлу для запуска
Нажмите Да в предупреждении редактора реестра
Нашел эту информацию на странице поддержки Symantec: https://support.symantec.com/en_US/article.TECH240507.html
Предоставленные ответы не помогли мне (Chrome или Firefox) при создании PWA для локальной разработки и тестирования. НЕ ИСПОЛЬЗУЙТЕ ДЛЯ ПРОИЗВОДСТВА! Мне удалось использовать следующее:
- Сайт инструментов онлайн- сертификатов со следующими параметрами:
- Общие имена: добавьте "localhost" и IP-адрес вашей системы, например 192.168.1.12.
- Альтернативные имена субъектов: добавьте "DNS" = "localhost" и "IP" =
<your ip here, e.g. 192.168.1.12>
- В раскрывающемся списке "CRS" выбрано значение "Самостоятельная подпись"
- все остальные параметры были по умолчанию
- Скачать все ссылки
- Импортировать сертификат.p7b в Windows двойным щелчком и выбрать "установить" / OSX?/ Linux?
- Добавлены сертификаты в приложение узла... на примере Google PWA
- добавлять
const https = require('https'); const fs = require('fs');
в начало файла server.js - закомментируйте
return app.listen(PORT, () => { ... });
внизу файла server.js - добавить ниже
https.createServer({ key: fs.readFileSync('./cert.key','utf8'), cert: fs.readFileSync('./cert.crt','utf8'), requestCert: false, rejectUnauthorized: false }, app).listen(PORT)
- добавлять
У меня больше нет ошибок в Chrome или Firefox