Comment faire confiance à une autorité de certification en Java?


Mon application se connecte à un service Web SSL qui utilise un certificat pour vérifier son identité. Récemment, ce certificat a changé et comme il n'est pas signé par une autorité de confiance, une partie de ma demande a échoué. Le conseil du service pour me protéger contre cette situation à l'avenir est que je devrais commencer à faire confiance au pouvoir de signature du certificat existant, au lieu des certificats individuels.

Comment cela peut-il être réalisé en Java?

Actuellement, j'ajoute le certificat qu'ils fournissent dans un magasin de clés en utilisant keytool et en le composant dans un TrustManagerFactory quelque chose comme:

public static TrustManager[] getTrustManagers() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
    KeyStore tks = KeyStore.getInstance(KeyStore.getDefaultType());
    tks.load(StarTrustManagerFactory.class.getResourceAsStream("webservice.ks"), "password".toCharArray());
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    tmf.init(tks);
    return tmf.getTrustManagers();
}; 

Existe-t-il un moyen d'adapter cette approche pour retourner un TrustManager qui fait confiance au pouvoir de signature des certificats que je possède? De plus, comment puis-je extraire les informations concernant le signataire du certificat du certificat que je possède?

Merci, Dan.

Author: Dan, 2014-10-29

1 answers

En supposant que le code affiché a fonctionné avant que le certificat ne change, laissez-le tel quel. Modifiez plutôt le webservice.ks keystore et importez les certificats intermediate et root ca du site auquel vous vous connectez.

Vous pouvez obtenir ces certificats en visitant l'adresse dans un navigateur Web et en les enregistrant sur le disque. Pour savoir comment faire cela dans Firefox, voir https://superuser.com/a/97203/172370 . Cependant, à l'étape 4 des instructions liées, sélectionnez root/intermediate certificats ca à exporter (cliquez dans la case hiérarchie des certificats sur celle souhaitée).

Puis en supposant le .le fichier ks est un magasin de clés jks, utilisez keytool pour importer les certificats dans le magasin de clés.

Mise à jour: ignorez ce que j'ai dit à propos du certificat intermédiaire, vous ne devriez pas en avoir besoin (voir Un truststore a-t-il besoin du certificat sub-ca?). Importez simplement le certificat ca racine.

 2
Author: poida, 2017-05-23 11:54:02