Создание самозаверяющего сертификата для домена и поддоменов - 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], я бы использовал одну из многих доступных утилит для самоподписывания сертификатов.

Рекомендуемые шаги:

  1. Создать самоподписанный сертификат
  2. Импорт сертификата в диспетчер сертификатов Windows
  3. Импорт сертификата в диспетчере сертификатов 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 для локальной разработки и тестирования. НЕ ИСПОЛЬЗУЙТЕ ДЛЯ ПРОИЗВОДСТВА! Мне удалось использовать следующее:

  1. Сайт инструментов онлайн- сертификатов со следующими параметрами:
    • Общие имена: добавьте "localhost" и IP-адрес вашей системы, например 192.168.1.12.
    • Альтернативные имена субъектов: добавьте "DNS" = "localhost" и "IP" = <your ip here, e.g. 192.168.1.12>
    • В раскрывающемся списке "CRS" выбрано значение "Самостоятельная подпись"
    • все остальные параметры были по умолчанию
  2. Скачать все ссылки
  3. Импортировать сертификат.p7b в Windows двойным щелчком и выбрать "установить" / OSX?/ Linux?
  4. Добавлены сертификаты в приложение узла... на примере 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

Другие вопросы по тегам