web-dev-qa-db-fra.com

Quel est le but / le rôle de l'attribut "alias" dans les fichiers de magasin de clés Java?

J'ai entendu des informations contradictoires sur le but de l'attribut alias dans Java. Quelqu'un peut-il préciser ce qu'est exactement cet attribut et ce qu'il doit être défini sur lors de la création d'un nouveau magasin de clés Java pour les certificats feuille et intermédiaires dans une chaîne de serveurs Web classique?

Je pensais que alias était juste un identifiant unique pour chaque entrée dans un fichier jks, et en tant que tel, la feuille aurait un alias différent d'un certificat intermédiaire. Maintenant, je n'en suis pas si sûr. Quelqu'un peut-il clarifier?

12
Mike B

[~ # ~] alias [~ # ~]

Pour répondre à votre question immédiate, le champ d'alias doit être une chaîne unique pour identifier l'entrée de clé. Cela s'applique à tous les types de confiance et d'intermédiaire.

Documentation

Keytool

Alias ​​KeyStore

Toutes les entrées du fichier de clés (entrées de clés et de certificats de confiance) sont accessibles via des alias uniques.

Un alias est spécifié lorsque vous ajoutez une entité au magasin de clés à l'aide de la commande -genseckey pour générer une clé secrète, de la commande -genkeypair pour générer une paire de clés (clé publique et privée) ou de la commande -importcert pour ajouter un certificat ou une chaîne de certificats à la liste des certificats approuvés. Les commandes keytool suivantes doivent utiliser ce même alias pour faire référence à l'entité.

Par exemple, supposons que vous utilisez l'alias duke pour générer une nouvelle paire de clés publique/privée et envelopper la clé publique dans un certificat auto-signé (voir Chaînes de certificat) via la commande suivante:

keytool -genkeypair -alias duke -keypass dukekeypasswd

Ceci spécifie un mot de passe initial de "dukekeypasswd" requis par les commandes suivantes pour accéder à la clé privée associée à l'alias duke. Si vous souhaitez modifier ultérieurement le mot de passe de la clé privée de duke, vous utilisez une commande comme celle-ci:

`keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass` 

Cela change le mot de passe de "dukekeypasswd" en "newpass".

Remarque: un mot de passe ne doit pas être spécifié sur une ligne de commande ou dans un script, sauf à des fins de test ou si vous êtes sur un système sécurisé. Si vous ne spécifiez pas d'option de mot de passe obligatoire sur une ligne de commande, vous serez invité à le faire

Normes et pratiques

Je ne pense pas qu'il existe de norme de dénomination définie et je suis sûr que vous pouvez parler à 10 personnes différentes et obtenir 10 réponses différentes. Vous le voulez juste unique et logique.

L'API et l'Oracle Keytool ne font pas un excellent travail de vérification des doublons, ce qui est une erreur particulière à mon avis étant donné qu'il est utilisé pour identifier chaque entrée dans un magasin de clés.

La meilleure façon de résoudre les doublons est de générer un nouveau fichier de clés et d'ajouter chaque entrée de l'ancien fichier de clés à la nouvelle avec un alias unique. Vous pouvez parcourir le magasin de clés et utiliser son horodatage pour identifier différents certificats dans un magasin.

11
Shane Andrie

J'avais exactement la même question et vous avez formulé la question parfaitement clairement. Ma compréhension après l'expérimentation (regrettable que la documentation ne l'indique pas clairement) est:

  1. Les alias ne sont pas des identificateurs à objet unique; vous pouvez utiliser l'alias identique pour une clé et une entrée de certificat dans un magasin de clés, sans que l'un n'efface l'autre.

  2. En effet, vous devez utiliser le même alias pour une clé et son certificat associé, pour les lier ensemble. Les autres certificats de la chaîne doivent avoir des alias différents, avec des noms raisonnables de votre choix pour les identifier.

Je ne suis pas un expert dans ce domaine, alors prenez ma réponse avec le bon grain de sel, pls.

1
Clint Staley

dans un keystore/truststore, vous pouvez avoir plus de clés/certificats et chaque clé a un alias. Si vous devez configurer le SSL dans un serveur, vous configurez généralement le magasin de clés, le mot de passe de magasin de clés, le mot de passe de clé et l'alias. Fondamentalement, avec l'alias, vous vous référez à la clé que vous avez l'intention d'utiliser.

Exemple avec jboss wildfly 8

<security-realm name="SSLClientCertRealm">    
    <server-identities>
        <ssl>
            <keystore path="server-ssl.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore" alias="alias_name" key-password="keystore"/>
        </ssl>
    </server-identities>
1
rkn

Votre question n'est pas très claire, mais répond à une possibilité:

L'API KeyStore et le format JKS ont concrètement deux types d'entrées pertinentes pour SSL/TLS: l'entrée privateKey pour un serveur contient la clé privée et le cert chaîne (feuille et intermédiaire (s) et généralement racine) sous un seul alias; trustedCert les entrées (le cas échéant) contiennent des certificats pour d'autres parties, généralement des autorités de certification, chacune sous un alias différent

Par programmation, les différents certificats de la chaîne d'une entrée privateKey sont obtenus par keystore.getCertificateChain(alias)[0] = feuille, [1] = premier intermédiaire, etc.

1