OpenSSL: como gerar um CSR com nomes alternativos de assunto (SANs) solicitados de forma interativa?

10

Desejo configurar o OpenSSL de modo que, ao executar openssl req -new para gerar uma nova solicitação de assinatura de certificado, seja solicitado que qualquer nome de assunto alternativo seja incluído no CSR.

Eu adicionei esta linha à seção [req_attributes] do meu openssl.cnf :

subjectAltName                  = Alternative subject names

Isso tem o efeito desejado que agora sou solicitado por SANs ao gerar um CSR:

$ openssl req -new -out test.csr -key ./test.key                            <<<
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [New York]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Example Co]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:test.example.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Alternative subject names []:DNS:alt1.example.com

No exemplo acima, digitei DNS:alt1.example.com quando solicitado pelas SANs.

O problema é que o CSR resultante não parece estar bem formatado:

$ openssl req -text -in ./test.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=US, ST=New York, O=The Banes, CN=test.thebanes.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    [...]
                Exponent: 65537 (0x10001)
        Attributes:
            X509v3 Subject Alternative Name:unable to print attribute

O OpenSSL reclama que não é possível imprimir o valor do atributo Nome Alternativo da Entidade. De exemplos online (onde as pessoas codificam as SANs em seu openssl.cnf, em vez de solicitar interativamente como eu quero), espero ver isso em vez disso:

        Attributes:
            X509v3 Subject Alternative Name:
                DNS:alt1.example.com

Então, como posso gerar um CSR bem formado com SANs interativamente solicitadas?

    
por Maxy-B 06.12.2012 / 01:35

3 respostas

4

Eu já lutei com essa pequena pepita ... o que é uma PITA!

Minha solução: Mudei todo o arquivo openssl.cnf para um arquivo Template Toolkit, deixando apenas a parte sans como a peça de substituição e, em seguida, envolvi um script perl em torno dele.

O script perl solicita as entradas das SANs, insere-as no modelo, salva o modelo em um arquivo temporário e, em seguida, chamo openssl req com a opção -config apontada para o arquivo temporário. descarte o arquivo temporário depois que o CSR for gerado.

Você também pode querer ver: link

Existem outros que sobrescrevem $ ENV antes da execução e enviam a chamada para openssl req em perl ou shell e realizam a mesma coisa de uma maneira um pouco mais eficiente:

    
por 06.12.2012 / 06:52
2

Este "subjectAltName" não deve estar nesta seção: attributes = req_attributes. Mas em uma seção para req_extensions = (chame como quiser).

E não há necessidade de toda a BS como

subjectAltName           = Alternative subject names
subjectAltName_default   = DNS:www.g00gle.com

Basta digitar o que você quer, quantos você deseja:

subjectAltName = DNS:*.g00gle.com, DNS:g00gle.com, DNS:192.168.1.2

(O último faz acesso interno como " link " sem aviso)

Então, algo como:

[ req ]
req_extensions     = my_extensions

[my_extensions]
subjectAltName     = DNS:*.g00gle.com, DNS:g00gle.com, DNS:192.168.1.2

Felicidades!

    
por 08.05.2015 / 19:21
2

Eu também estou procurando uma solução. E isso é o que você quer:

[req]
default_bits      = 2048
default_key_file  = private.key.pem
...
...
attributes        = req_attributes

[req_attributes]
subjectAltName = Alternative DNS names, Email adresses or IPs (comma seperated list)
#optional default value
subjectAltName_default = DNS:myhost.com.au,IP:127.0.0.1,EMAIL:[email protected]

E você pode obter isso por solicitação de nome (s) de assunto alternativo:)

#openssl req -in mytest1/temp.csr.pem -noout -text
    Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=DE, ST=Sachsen, L=Heidenau, O=IT Rab\xC3\xB6se, OU=ssl
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:d8:cd:14:ca:d0:06:6c:8c:11:e9:52:bc:46:39:
                    c1:cf:5a:6e:dd:3b:a8:85:15:6b:13:82:82:4a:48:
                    cb:53:ea:70:ea:f4:02:b2:ef:b1:41:b2:d7:11:c7:
                    11:ba:07:1b:be:8c:30:bc:60:d2:82:83:a1:e1:19:
                    75:3b:69:03:01:3c:2b:7b:85:f4:2e:a9:58:68:8f:
                    0e:f4:5e:50:e1:3f:9e:cf:46:a0:eb:69:aa:1e:cb:
                    3a:99:cb:1d:93:60:d0:3b:38:96:87:45:19:51:f4:
                    40:72:e5:a7:5e:62:37:41:44:48:64:47:95:14:97:
                    4f:27:d0:0c:e7:6f:c1:e1:37
                Exponent: 65537 (0x10001)
        Attributes:
            X509v3 Subject Alternative Name:DNS:www.google.de,EMAIL:[email protected]
    Signature Algorithm: sha1WithRSAEncryption
        9d:2b:e4:eb:1b:c0:b6:0b:b4:62:a7:4d:01:68:98:68:36:98:
        1e:e9:bc:59:24:0f:1b:32:7b:da:9d:39:a4:0f:2c:70:3e:aa:
        f7:07:e7:6b:9b:3b:00:b3:71:e0:54:07:78:c7:6e:57:e3:89:
        07:e1:93:f1:77:e7:cc:0e:d0:ed:c5:d0:a3:5d:1a:cd:bb:d8:
        5f:64:25:81:1b:a8:2f:ef:c7:84:7a:f6:b8:52:4e:4c:1c:8d:
        83:b7:9b:02:8e:b2:39:68:a1:fe:f1:59:8b:e0:c4:91:f1:a9:
        c7:b3:82:a3:d2:92:2b:e5:79:9f:29:b6:63:e7:cf:9d:17:98:
        fe:70
    
por 30.11.2017 / 20:57