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