Keytool ServerAlternateName

3

Estou tentando obter os certificados para as implantações do Jira / Confluence em casa. As pessoas os acessam de maneira diferente, seja pelo nome do host ou pelo FQDN. Estou usando o keytool do Java 7 para ter acesso à funcionalidade de nome alternativo do servidor:

-ext san=dns:jira

... e eu entrego ...

jira.example.com

... como o CN ao gerar o certificado. Em seguida, gerei uma solicitação de assinatura, entrego o CSR para nossa Win2k8r2 PKI para obter um certreq para obter a chave assinada e importá-la de volta para o keystore.

Agora, quando configuro como eu disse acima, meus navegadores (Chrome, Firefox, Safari) parecem achar que o jira é o único nome válido, embora quando eu inspecionar o certificado, o CN mostre o FQDN.

Se eu eliminar o ext , ele usará o CN que é o FQDN.

Quando eu tenho várias declarações ext , ele apenas usa a última e eu tentei vincular várias entradas DNS:foo sob uma ext junto com várias pontuações.

Outro ângulo que eu corri é configurar o servidor web para fazer um 301 para o FQDN. Eu estou bem com isso também, mas eu estou preso com o Tomcat então "mudar para Apache / nginx" não vai funcionar para mim. Esta parece ser a única documentação que eu venho através de fazer algo parecido com o Tomcat mas seus 3 anos de idade e é o final do dia para mim. Eles adicionaram essa funcionalidade ao Tomcat6?

    
por Tawm 15.03.2013 / 01:38

2 respostas

9

Sei que essa pergunta é muito antiga, mas, para qualquer um que possa achar útil, mencionarei o que funciona para mim:

  • use o CN para inserir algum nome amigável para o ser humano como "nosso servidor JIRA legal"; -)
  • insira san assim: -ext san=dns:jira,dns:jira.example.com

BTW, você também pode adicionar endereços IP, se quiser. Eu pessoalmente uso o seguinte para o meu computador de desenvolvimento:

keytool -certreq ... -file server.csr -keystore server.keystore ... -ext san=dns:localhost,dns:myComputerName,ip:127.0.0.1,ip:::1

NOTA: eu uso java8 keytool; Espero que isso funcione em java7 keytool também, mas eu não testei

    
por 24.02.2016 / 18:59
1

Gere seus certificados de vários domínios com OpenSSL e não com keytool , em seguida, converta a chave e o certificado para um keystore Java para usar com o Tomcat. O exemplo a seguir gera um certificado autoassinado, deve ser fácil o suficiente para se adaptar a um certificado "real".

Gere um arquivo openssl.cnf seguindo o guia no link acima e execute estes comandos:

# Generates a self-signed certificate + key, omit if you already have one
openssl req -config openssl.cnf -x509 -days 3650 -newkey rsa:2048 \
   -out self-signed-certificate.pem -keyout pub-sec-key.pem
# Remove passphrase from key
openssl rsa -in pub-sec-key.pem -out new.key
# Generate PKCS12 keystore
openssl pkcs12 -export -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES \
   -export -in self-signed-certificate.pem -inkey new.key -name alias \
   -out keystore.p12
# Convert PKCS12 to JKS
keytool -importkeystore -destkeystore keystore.jks -deststoretype JKS \
   -srcstoretype PKCS12 -srckeystore keystore.p12

Preste atenção ao valor do alias para -name no exemplo acima. Esse é o nome do certificado que você deve passar para tomcat .

Para fins de conclusão, incluirei como a emissão de um certificado com SANs pode funcionar com uma autoridade de certificação:

SAN                     = email:copy

...

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=${ENV::SAN}
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

Execute este comando para gerar uma chave + CSR contendo SANs (não testada):

SAN="DNS: domain1.example.com, DNS: domain2.example.com" openssl req \
   -config /path/to/openssl.conf \
   -subj "/C=XX/ST=XX/L=xxx/O=My Org/OU=My OU/CN=main.example.com" \
   -newkey rsa:2048 -out file.csr -keyout out.key \
   -infiles /path/to/csr/file.csr

Execute este comando para emitir um certificado:

SAN="DNS: domain1.example.com, DNS: domain2.example.com" openssl ca \
   -config /path/to/openssl.conf -policy policy_anything \
   -subj "/C=XX/ST=XX/L=xxx/O=My Org/OU=My OU/CN=main.example.com" \
   -infiles /path/to/csr/file.csr
    
por 15.03.2013 / 08:23