web-dev-qa-db-fra.com

KeyTool ServeralternatName

J'essaie d'obtenir les certificats juste pour nos déploiements de jira/confluence dans la maison. Les gens y accèdent différemment, soit du nom d'hôte ou de la FQDN. J'utilise Java 7's KeyTool de KeyTool donc j'ai accès à la fonctionnalité de nom de remplacement du serveur:

-ext san=dns:jira

... et je la remetque ...

jira.example.com

... comme le CN lors de la génération du certificat. Je génère ensuite une demande de signature, remettez la CSR sur notre Win2K8R2 PKI pour un certreq pour obtenir la clé signée et importer la clé dans le magasin de clés.

Maintenant, quand je l'ai configuré comme je l'ai dit au-dessus de mes navigateurs (chrome, firefox, safari) semble penser que le nom jira est le seul nom valide, même si j'inspecte le certificat, le CN montre le FQDN.

Si je dépose le ext, il utilisera le CN qui est le FQDN.

Lorsque j'ai plusieurs ext déclarations, il utilise simplement le dernier et j'ai essayé de corder plusieurs DNS:foo Sous une ext entrées avec diverses ponctuations.

Un autre angle que j'ai exécuté est de configurer le serveur Web pour effectuer un 301 à la FQDN. Je vais bien avec ça aussi mais je suis coincé avec Tomcat alors "Basculer vers Apache/Nginx" ne fonctionnera pas pour moi. Ceci Semble être la seule documentation que j'ai rencontrée pour faire quelque chose comme ça avec Tomcat mais ses 3 ans et c'est la fin de la journée pour moi. Ont-ils ajouté cette fonctionnalité à Tomcat6?

6
Tawm

Je réalise que cette question est assez ancienne mais pour quiconque peut le trouver utile, je mentionnerai ce qui fonctionne pour moi:

  • utilisez CN pour entrer un nom convivial de l'homme comme "notre serveur de jira cool" ;-)
  • entrez San comme ceci: -ext san=dns:jira,dns:jira.example.com

BTW, vous pouvez également ajouter des adresses IP si vous le souhaitez. J'utilise personnellement ce qui suit pour mon ordinateur de développement:

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

Remarque: j'utilise Java8 Keytool; J'espère que cela fonctionne dans Java7 Keytool aussi, mais je ne l'ai pas testé

14
tomorrow

Générez vos certificats multi-domaines avec OpenSSL et non avec keytool puis convertir la clé et le certificat à un Java keyStore à utiliser avec Tomcat. L'exemple suivant génère un certificat auto-signé, il devrait être assez facile de s'adapter à un certificat "réel".

Générez un openssl.cnf après le guide dans le lien ci-dessus, exécutez ces commandes:

# 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

Faites attention à l'alias Alias ​​ Valeur à -name Dans l'exemple ci-dessus. C'est le nom du certificat que vous devez transmettre à Tomcat.

Par souci d'achèvement, je vais inclure comment la délivrance d'un certificat avec SANS peut travailler avec une autorité de certification:

SAN                     = email:copy

...

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

Exécutez cette commande pour générer une touche + CSR contenant sans (UNTEST):

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

Exécutez cette commande pour émettre un certificat:

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
1
fuero

Pour vérifier que le CSR a le fichier SAN = Sujet Noms alternatifs incorporés, utilisez l'essentiel pour imprimer le CSR:

keytool -printcertreq -file test.csr

Si cela fonctionnait, vous obtiendrez quelque chose comme:

#1: ObjectId: 2.5.29.17 Criticality=false
SubjectAlternativeName [
  DNSName: test.example.com
  DNSName: test
]

Remarque - Pour obtenir les deux entrées comme ci-dessus (test.example.com et test), vous avez dû créer le CSR comme indiqué dans "Réponse" de demain en tant que "San = DNS: test.example.com, DNS: Test ".

Ne suivez pas la documentation de KeyTool trompeur [{--Ext ext} *] qui indique que zéro ou plusieurs entrées "-ext" peut être transmise sur la ligne de commande:

-ext san=dns:test.example.com -ext san=dns:test

Cela ne fonctionnera pas, vous obtiendrez la dernière sortie DNS d'extension (SAN = DNS: test).

0
DocOc