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?
Je réalise que cette question est assez ancienne mais pour quiconque peut le trouver utile, je mentionnerai ce qui fonctionne pour moi:
-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é
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
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).