Certificado autoassinado com nomes alternativos de assunto

1

Estou tentando criar um certificado auto-assinado com SANs usando o OpenSSL no Ubuntu 14.10. Estive prestes a gerar com sucesso um CSR que inclui as extensões adequadas.

Quando eu gero o certificado usando o CSR, as informações da SAN não passam.

openssl.cnf

[ ca ]
default_ca  = CA_default

[ CA_default ]
dir     = ./demoCA      # Where everything is kept
certs       = $dir/certs        # Where the issued certs are kept
crl_dir     = $dir/crl      # Where the issued crl are kept
database    = $dir/index.txt    # database index file.
new_certs_dir   = $dir/newcerts     # default place for new certs.
certificate = $dir/cacert.pem   # The CA certificate
serial      = $dir/serial       # The current serial number
crlnumber   = $dir/crlnumber    # the current crl number must be commented out to leave a V1 CRL
crl     = $dir/crl.pem      # The current CRL
private_key = $dir/private/cakey.pem# The private key
RANDFILE    = $dir/private/.rand    # private random number file
x509_extensions = v3_req        # The extentions to add to the cert
name_opt    = ca_default        # Subject Name options
cert_opt    = ca_default        # Certificate field options
copy_extensions = copy
default_days    = 365           # how long to certify for
default_crl_days= 30            # how long before next CRL
default_md  = default       # use public key default MD
preserve    = no            # keep passed DN ordering
policy      = policy_match

[ policy_match ]
countryName     = match
stateOrProvinceName = match
organizationName    = match
organizationalUnitName  = optional
commonName      = supplied
emailAddress        = optional
default_bits        = 2048
default_keyfile     = privkey.pem
distinguished_name  = req_distinguished_name
attributes      = req_attributes
x509_extensions = usr_cert  # The extentions to add to the self signed cert
string_mask = utf8only
req_extensions = v3_req # The extensions to add to a certificate request

[ req_distinguished_name ]
countryName         = Country Name (2 letter code)
countryName_default     = US
countryName_min         = 2
countryName_max         = 2
stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = VA
localityName            = Locality Name (eg, city)
localityName_default            = Ashburn
organizationalUnitName      = Organizational Unit Name (eg, section)
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_max          = 64
emailAddress            = Email Address
emailAddress_max        = 64
emailAddress_default            = [email protected]

[ req_attributes ]
challengePassword       = A challenge password
challengePassword_min       = 4
challengePassword_max       = 20
unstructuredName        = An optional company name

[ usr_cert ]
basicConstraints=CA:FALSE
nsComment           = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
subjectAltName=@alt_names

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = CA:true

[ crl_ext ]
authorityKeyIdentifier=keyid:always

[alt_names]
IP.1 = 192.168.1.169

gerar chave:

openssl genrsa -out test.key 2048

gere o csr:

openssl req -new -key test.key -out test.csr

verifique o csr:

openssl req -text -noout -in test.csr | grep "IP Address"
IP Address:192.168.1.169

gere cert:

openssl x509 -req -in test.csr -signkey test.key -out test.pem

verifique o certificado:

openssl x509 -text -noout -in test.pem | grep "IP Address"
    
por vosmith 21.07.2015 / 21:03

1 resposta

1

Nos openssl x509 documentos, ao usar openssl x509 -req :

-extfile filename
  file containing certificate extensions to use. If not specified then no extensions are added to the certificate.

-extensions section
  the section to add certificate extensions from. If this option is not specified then the extensions should either be contained in the unnamed (default) section or the default section should contain a variable called "extensions" which contains the section to use. See the x509v3_config manual page for details of the extension section format.

Como o comando openssl x509 -req não está usando as opções -extfile ou -extensions , e , seu openssl.cnf tem uma seção padrão / sem nome que não tem uma variável "extensions" então seu certificado autoassinado gerado não terá as extensões.

Por isso, você pode tentar:

$ openssl x509 -req -in test.csr -signkey test.key -out test.pem -extensions v3_ca

Observação de que você deseja fazer o acima após ter editado seu openssl.cnf para que a seção v3_ca seja semelhante:

[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = CA:TRUE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

isto é, que você adicionou a variável subjectAltName a essa seção, assim como você tem na seção v3_req . Sem isso, seu certificado autoassinado teria extensões, mas não as SANs que você deseja. (Eu também copiei as keyUsage extensões de v3_req , supondo que você queira aquelas em seu certificado emitido também.) Você pode ser tentado a reutilizar v3_req seção, em vez de atualizar v3_ca - mas você não quer fazer isso. Por quê? Porque v3_req diz que o certificado é não uma CA:

[ v3_req ]
basicConstraints = CA:FALSE
...

E como você está gerando um certificado autoassinado, isso provavelmente não é o que você deseja.

Espero que isso ajude!

    
por 22.02.2016 / 00:38