Я пытаюсь создать сертификат SSL, который после подписания моим собственным центром сертификации будет работать для нескольких доменов.
Мой файл конфигурации openssl выглядит так:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = DE
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Berlin
localityName = Locality Name (eg, city)
localityName_default =
organizationName = Organization Name (eg, company)
organizationName_default =
commonName = Common Name (eg, your domain)
commonName_default = example.com
commonName_max = 64
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = example.com
DNS.2 = a.example.com
DNS.3 = b.example.com
В результате CSR выглядит так:
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=DE, ST=Berlin, CN=example.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:example.com, DNS:a.example.com, DNS:b.example.com
Signature Algorithm: sha1WithRSAEncryption
...
Однако после установки на apache браузеры (как Chrome, так и Firefox), похоже, не видят и не уважают SAN. example.com
работает из-за общего имени, два поддомена - нет.
Что я делаю не так? Как я могу решить эту проблему?
(Я упростил пример здесь. Сертификаты с подстановочными знаками не подходят)
Вы разместили все необходимое Кроме детали фактически подписанного сертификата из вашего центра сертификации. Я предполагаю, что ваш центр сертификации по какой-то причине удалил или проигнорировал поля SAN в вашем запросе. Это должно быть достаточно легко проверить с помощью openssl.
openssl x509 -in my.crt -text
Предполагая, что поля SAN действительно отсутствуют в подписанном сертификате, вам нужно будет выяснить, почему ваш центр сертификации удаляет или игнорирует эти поля. Я не очень хорошо знаком с запуском CA на основе openssl, но я знаю, что более ранние версии Windows CA требовали настройки реестра для поддержки SAN.
Я отлаживаю аналогичную проблему с добавлением требований к клиентским сертификатам. Я использую tomcat в Linux, поэтому могу сделать следующее для отладки:
добавьте "-Djavax.net.debug = all" в среду выполнения любым разумным способом. Я добавил это в свое приложение setenv.sh
файл.
Это приведет к созданию записей журнала, которые позволят вам увидеть подробности подтверждения ssl, например, включена ли вся цепочка сертификатов в сообщение serverHello.
используйте вариант этой команды openssl, чтобы увидеть, как openssl обрабатывает сертификаты
$ openssl s_client -connect <address>:<port> -debug \
-cert <client_cert_file> -key <client_key_file> -CAfile cacert.pem