Недопустимый самоподписанный 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%%
Еще одно примечание. Если все, что вы пытаетесь сделать, это остановить хром от ошибок при просмотре самоподписанного сертификата, вы можете сказать 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 и проверил, что дата создания сегодня - так что это я только что создал.
надеюсь, что это будет полезно для кого-то потратить как день на это.
никогда не обновлять хром!
Ответ 7
Мое решение для mac os mojave, chrome, localhost и express node.js(spdy):
https://gist.github.com/studentIvan/63d02ca661e8af326eb7ee76336a8023
Ответ 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"