Назад | Перейти на главную страницу

Создание сертификата SAN SSL, который работает для firefox и chrome

Я пытаюсь создать сертификат 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, поэтому могу сделать следующее для отладки:

  1. добавьте "-Djavax.net.debug = all" в среду выполнения любым разумным способом. Я добавил это в свое приложение setenv.sh файл.

    Это приведет к созданию записей журнала, которые позволят вам увидеть подробности подтверждения ssl, например, включена ли вся цепочка сертификатов в сообщение serverHello.

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

    $ openssl s_client -connect <address>:<port> -debug \
       -cert <client_cert_file> -key <client_key_file> -CAfile cacert.pem