Обновление Google Chrome до версии 58 начало аннулировать мои самозаверяющие сертификаты несколько дней назад. Он жаловался на пропажу subjectAltNames
. Я провел небольшое исследование и попробовал несколько предложений (которые не сработали), но затем обнаружил эта почта, единственный, с которым я мог работать.
Или я?
Ура, хром теперь принимает мои недавно сгенерированные и импортированные сертификаты, и я был в пути,
до того как, Я попал на страницу в своем PHP
веб-приложение, которое требует загрузки данных из другого микро-веб-сервиса на той же машине разработчика.
stream_socket_client (): операция SSL завершилась неудачно с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 14090086: подпрограммы SSL: ssl3_get_server_certificate:
Я гуглил и возился с этим около 4 часов, и просто не могу об этом подумать.
Вопрос
Почему хром принимает мой сертификат. ОДНАКО инструменты вроде curl
, openssl s_client
все дает мне unable to verify the first certificate
или invalid certificate
? Я попытался передать сертификат в качестве параметра, но все еще недействителен.
Отладка с помощью curl и openssl, передавая файл сертификата в качестве параметра, продолжает давать мне эту ошибку
Результат проверки сертификата SSL: невозможно получить сертификат местного эмитента (20),
Думаю, к концу дня я буду полностью лысым.
Ноты
Виртуальная машина - это моя локальная среда разработки, поэтому у меня есть несколько доменов с собственными сертификатами и ключами.
ВМ находится на IP 192.168.33.10. это означает, что хром не обращается к localhost. Однако curl и openssl s_clinet пытаются получить доступ к locahost
Сервер - это виртуальная машина под управлением ubuntu 14.04.
Установлен самозаверяющий сертификат на хост-машине с MMC (консолью управления Microsoft)
Ошибка определенно исходит от клиентского класса, пытающегося получить доступ к веб-сервису.
Я попытался передать сертификат в качестве параметра, но все еще недействителен.
Я полностью осознаю, что могу установить для запроса verify peer значение false или pass --insecure, но я ничего из этого не узнаю.
SSL-сеанс: Протокол: TLSv1.2
побежал sudo dpkg-reconfigure ca-certificates
обновить сертификаты
бежали sudo update_ca_ccertificates
Я достиг 9000 уровня разочарования
Отменить обновление
Я регенерировал новый сертификат с отключенным расширением v3 и сообщением "Назад в Chrome" subjectAltName
отсутствует, но завиток работает. Мне нужно решить, как создать сертификаты, которые будут принимать и curl, и chrome.
Найти более четкое руководство это было намного проще openssl.conf
. В моих первоначальных попытках добавить SAN
■ У меня должны быть некомментированные лишние строки в conf, которые добавляли дополнительную информацию к сертификатам, вызывающим конфликты. Следуя этому шаблону, мой сертификат работает со всех сторон:
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = MN
localityName = Locality Name (eg, city)
localityName_default = Minneapolis
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max = 64
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = kb.example.com
DNS.2 = helpdesk.example.org
DNS.3 = systems.example.net
IP.1 = 192.168.1.1
IP.2 = 192.168.69.14
Спасибо за комментарии @garethTheRed. Ваши комментарии помогли мне переосмыслить мой подход к отладке этой проблемы.
Даже начало публикации здесь помогает мне изложить то, что я пробовал, и помогает мозгу придумать больше возможных решений.