Начиная с Chrome 58, он больше не принимает самозаверяющие сертификаты, на которые опираются Common Name
: https://productforums.google.com/forum/#!topic/chrome/zVo3M8CgKzQ;context-place=topicsearchin/chrome/category $ 3ACanary% 7Csort: актуальность% 7Cspell: ложь
Вместо этого требуется использование Subject Alt Name
. Я ранее следуя это руководство о том , как создать собственный подписанный сертификат: https://devcenter.heroku.com/articles/ssl-certificate-self который работал большим , потому что я требуется server.crt
и server.key
файлы для того, что я делаю. Теперь мне нужно создать новые сертификаты, которые включают, SAN
однако, все мои попытки сделать это не работали с Chrome 58.
Вот что я сделал:
Я следовал инструкциям вышеупомянутой статьи Heroku, чтобы сгенерировать ключ. Затем я написал новый файл конфигурации OpenSSL:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = san
extensions = san
[ req_distinguished_name ]
countryName = US
stateOrProvinceName = Massachusetts
localityName = Boston
organizationName = MyCompany
[ san ]
subjectAltName = DNS:dev.mycompany.com
Затем сгенерировал server.crt
с помощью следующей команды:
openssl req \
-new \
-key server.key \
-out server.csr \
-config config.cnf \
-sha256 \
-days 3650
Я на Mac, поэтому я открыл server.crt
файл с помощью Keychain и добавил его в свои системные сертификаты. Затем я установил его на Always Trust
.
За исключением файла конфигурации для установки значения SAN, это были аналогичные шаги, которые я использовал в предыдущих версиях Chrome для создания и доверия самоподписанному сертификату.
Однако после этого я все равно получаю ERR_CERT_COMMON_NAME_INVALID
в Chrome 58.
источник
-config <(cat /System/Library/OpenSSL/openssl.cnf ; printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')
dev.company.name
на,localhost
и это сработало для обслуживания локального сайта разработки с localhost. В macOS мне также пришлось добавить сертификат в связку ключей и установить SSL «Всегда доверять».В Windows сохраните этот скрипт в папке SSL как makeCERT.bat. Он создаст эти файлы: example.cnf, example.crt, example.key
источник
Вот решение, которое работает для меня:
Создать ключ CA и сертификат
Создать server_rootCA.csr.cnf
Создать файл конфигурации v3.ext
Создать ключ сервера
Создать сертификат сервера
Добавьте сертификат и ключ в файл сайта Apache2, раздел HTTPS (порт 443)
Скопируйте server_rootCA.pem с сервера на ваш компьютер.
.. и добавить его в браузер Chromium
ВЫ ВСЕ СДЕЛАНЫ!
PS Вместо создания функциональной пары сертификатов CA и сервера (согласно приведенным выше инструкциям) вы можете просто отключить заголовки HSTS в конфигурации HTTP-сервера. Это не позволит Chromium применять HTTPS и позволит пользователям нажимать «Дополнительно → перейти к your.url (небезопасно)» без необходимости получать и устанавливать свой собственный сертификат CA (server_rootCA.pem). Другими словами - необходимость отключить HSTS позволит публично просматривать ваш сайт через HTTP и / или небезопасное соединение HTTPS (будьте осторожны!).
Для Apache2 добавьте следующее в site-file, HTTP (port 80) section
Протестировано на Debian / Apache2.4 + Debian / Chromium 59
https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58
источник
-config <( cat server_rootCA.csr.cnf )
а не просто-config server_rootCA.csr.cnf
?Есть несколько хороших ответов, которые дают примеры того, как заставить это работать, но ни один из них не объясняет, где что-то пошло не так в вашей попытке. OpenSSL может быть довольно не интуитивным иногда, так что стоит пройтись.
Во-первых, кроме этого, OpenSSL по умолчанию игнорирует любые значения отличительных имен, которые вы указываете в конфигурации. Если вы хотите использовать их, вы должны добавить
prompt = no
в свой конфиг. Кроме того, записанная команда генерирует только запрос сертификата, а не сам сертификат, поэтому-days
команда ничего не делает.Если вы сгенерируете запрос сертификата с помощью этой команды и проверите результат, Subject Alt Name будет присутствовать:
Но затем, если вы сгенерируете сертификат с помощью команды в ссылке heroku и проверите результат, Subt Alt Name будет отсутствовать:
Причина в том, что по умолчанию OpenSSL не копирует расширения из запроса в сертификат. Обычно сертификат создается / подписывается ЦС на основе запроса от клиента, и некоторые расширения могут предоставить сертификату больше мощности, чем предполагал ЦС, если они будут слепо доверять расширениям, определенным в запросе.
Есть способы сказать OpenSSL, что нужно копировать расширения, но IMHO, это больше, чем просто предоставление расширений в файле конфигурации при создании сертификата.
Если вы попытаетесь использовать существующий файл конфигурации, он не будет работать, поскольку раздел верхнего уровня помечен,
[req]
поэтому эти параметры применяются только к команде req, а не к команде x509. Нет необходимости иметь маркер раздела верхнего уровня, так что вы можете просто удалить эту первую строку, и тогда она будет хорошо работать как для генерации запросов, так и для сертификата.Кроме того, вы можете использовать
-x509
аргументreq
команды для создания самозаверяющего сертификата в одной команде, а не сначала создавать запрос, а затем сертификат. В этом случае нет необходимости удалять[req]
строку раздела, так как этот раздел читается и используется командой req.Напомним, что здесь есть модифицированный файл конфигурации, используемый в приведенных выше командах:
источник
Мое решение состоит в том, чтобы оставить основной
openssl.cnf
таким, какой он есть, и просто в конце добавить новый раздел, например,[ cert_www.example.com ]
где www.example.com - это веб-сайт, для которого я хочу создать сертификат, и в нем укажите нужноеsubjectAltName
мне (и что-нибудь еще). Конечно, раздел может быть назван как угодно.После этого я могу выполнить
openssl req
команду, как и раньше, просто добавив,-extensions cert_www.example.com
чтобы ее содержимое было забрано, и добавляю,-subj
чтобы добавить всю информацию DN.Не забудьте проверить содержимое сертификата после его создания и перед его использованием, с
openssl x509 -text
источник
Скрипт Bash с конфигом запекается в
В качестве сценария оболочки, который должен работать на разных платформах с bash. Предполагается, что
HOSTNAME
env установлен для оболочки или укажите имя хоста по вашему выбору, напримерself_signed_cert.sh test
Вышеприведенное более или менее добавляет минимальную информацию о конфигурационном файле, необходимую openssl.
Обратите внимание, что
DNS:localhost
в качестве SAN включено extra, чтобы упростить тестирование через localhost. Удалите этот лишний бит из скрипта, если он вам не нужен.кредит
Ответ bcardarella - отличный (не может комментировать / голосовать из-за недостаточного количества повторений). Тем не менее, ответ использует существующее расположение файла конфигурации openssl, которое зависит от платформы ... отсюда:
Очевидно, что нужно просто найти файл конфигурации openssl для вашей конкретной платформы и указать правильное местоположение.
Контрольная работа
Для способа тестирования импортируйте данные
test.cert.pem
в органы управления Chrome вchrome://settings/certificates
:И после тестирования
источник