Недопустимый самоподписанный SSL-сертификат - "Тема альтернативного имени отсутствует"

Недавно Chrome перестала работать с моими собственными сертификатами SSL и думает, что они небезопасны. Когда я смотрю на сертификат на вкладке DevTools | Security, я вижу, что он говорит

Тема Альтернативное имя Отсутствует Сертификат для этого сайта не содержать расширение альтернативного имени объекта, содержащее домен имя или IP-адрес.

Ошибка сертификата Есть проблемы с цепочкой сертификатов сайта (Нетто:: ERR_CERT_COMMON_NAME_INVALID).

Как я могу это исправить?

Ответ 1

Чтобы исправить это, вам нужно предоставить дополнительный параметр openssl при создании сертификата, в основном

-sha256 -extfile v3.ext

где v3.ext - такой файл, с заменой %%DOMAIN%% на то же имя, которое вы используете как ваш Common Name. Подробнее здесь и здесь. Обратите внимание, что обычно вы устанавливаете Common Name и %%DOMAIN%% в домен, к которому вы пытаетесь создать сертификат. Поэтому, если это было www.mysupersite.com, вы использовали бы это для обоих.

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = %%DOMAIN%%

Примечание. Сценарии, которые решают эту проблему, и создают полностью доверенные сертификаты ssl для использования в браузерах Chrome, Safari и Java, можно найти здесь

Еще одно примечание. Если все, что вы пытаетесь сделать, это остановить хром от ошибок при просмотре самоподписанного сертификата, вы можете сказать Chrome игнорировать все ошибки SSL для ВСЕХ сайтов, запустив его с опцией специальной командной строки как описано здесь, на SuperUser

Ответ 2

Следующее решение работало для меня на Chrome 65 (ref) -

Создайте файл конфигурации OpenSSL (пример: req.cnf)

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = company.net

Создайте сертификат, ссылающийся на этот файл конфигурации

openssl req -x509 -nodes -days 730 -newkey rsa:2048 \
 -keyout cert.key -out cert.pem -config req.cnf -sha256

Ответ 3

Я создал скрипт bash, чтобы упростить создание самозаверяющих сертификатов TLS, которые действительны в Chrome.

самоподписанный скрипт bls

После установки сертификатов обязательно перезапустите chrome (chrome://restart). Протестировано на Chrome 65.x и все еще работает.


Еще один (гораздо более надежный) инструмент, который стоит проверить, - cfssl набор инструментов CloudFlare cfssl:

cfssl

Ответ 4

Я просто использую параметр -subj, добавляющий IP-адрес машин. Поэтому разрешается только с одной командой.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -sha256 -subj '/CN=my-domain.com/subjectAltName=DNS.1=192.168.0.222/' -keyout my-domain.key -out my-domain.crt

Вы можете добавить другие атрибуты, такие как C, ST, L, O, OU, emailAddress, чтобы генерировать сертификаты без запроса.

Ответ 5

Мне удалось избавиться (net:: ERR_CERT_AUTHORITY_INVALID), изменив значение DNS.1 файла v3.ext

[alt_names] DNS.1 = domainname.com

Измените domainname.com на свой собственный домен.

Ответ 6

на MAC, начиная с версии Chrome 67.0.3396.99, мой самозаверяющий сертификат перестал работать.

регенерация со всем, что написано здесь, не сработало.

ОБНОВИТЬ

был шанс подтвердить, что мой подход работает сегодня :). Если это не работает для вас, убедитесь, что вы используете этот подход

v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = <specify-the-same-common-name-that-you-used-while-generating-csr-in-the-last-step>
$

скопировано здесь https://ksearch.wordpress.com/2017/08/22/generate-and-import-a-self-signed-ssl-certificate-on-mac-osx-sierra/

КОНЕЦ ОБНОВЛЕНИЯ

наконец-то смог увидеть зеленый Secure только тогда, когда удалил мой сертификат из системы и добавил его в локальную цепочку для ключей. (если есть - бросьте первым). Не уверен, что это имеет значение, но в моем случае я скачал сертификат через Chrome и проверил, что дата создания сегодня - так что это я только что создал.

надеюсь, что это будет полезно для кого-то потратить как день на это.

никогда не обновлять хром!

Ответ 8

  • Сделайте копию вашей конфигурации OpenSSL в вашем домашнем каталоге:

    cp /System/Library/OpenSSL/openssl.cnf ~/openssl-temp.cnf
    

    или в Linux:

    cp /etc/ssl/openssl.cnf ~/openssl-temp.cnf
    
  • Добавьте альтернативное имя субъекта в openssl-temp.cnf под [v3_ca]:

    [ v3_ca ]
    subjectAltName = DNS:localhost
    

    Замените localhost доменом, для которого вы хотите создать этот сертификат.

  • Создать сертификат:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
        -config ~/openssl-temp.cnf
        -keyout /path/to/your.key -out /path/to/your.crt
    

Затем вы можете удалить openssl-temp.cnf

Ответ 9

Вот очень простой способ создать IP-сертификат, которому Chrome будет доверять.

Файл ssl.conf...

[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext
prompt             = no

[ req_distinguished_name ]
commonName                  = 192.168.1.10

[ req_ext ]
subjectAltName = IP:192.168.1.10

Где, конечно, 192.168.1.10 - это IP-адрес локальной сети, которому Chrome доверяет.

Создайте сертификат:

openssl genrsa -out key1.pem
openssl req -new -key key1.pem -out csr1.pem -config ssl.conf
openssl x509 -req -days 9999 -in csr1.pem -signkey key1.pem -out cert1.pem -extensions req_ext -extfile ssl.conf
rm csr1.pem

В Windows импортируйте сертификат в хранилище доверенных корневых сертификатов на всех клиентских компьютерах. На Android Phone или Tablet загрузите сертификат для его установки. Теперь Chrome будет доверять сертификату на Windows и Android.

На Windows Dev Box лучшее место, чтобы получить openssl.exe из "c:\Program Files\Git\usr\bin\openssl.exe"