Se connecter à un site en https avec un certificat p12
Le côté serveur m'a donné un .p12
fichier de certificat que j'ai cliqué et installé sur ma machine et ensuite, je peux accéder à la HTTPS
site via le navigateur. Maintenant, ils veulent me faire analyser leur site avec le certificat donné. Je suis bloqué à la première étape de celle-ci, en essayant d'obtenir le inputStream
de la httpsURLConnection
. Le site n'a pas de connexion. Il vérifie seulement si vous avez le certificat ou pas.
Ce que j'ai fait jusqu'à présent était d'utiliser Firefox pour exporter le certificat dans un .crt
format de fichier. Ensuite, j'ai utilisé la commande keytool pour l'importer (le .crt
fichier, pas le .p12
) en java fichier de clés. Puis dans le code:
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
File ksFile = new File(keystorePath);
in = new FileInputStream(ksFile);
ks.load(in, "changeit".toCharArray());
X509Certificate cert = (X509Certificate) ks.getCertificate(certificateAlias);
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection con = (HttpsURLConnection) (new URL(urlString)).openConnection();
con.connect();
con.getInputStream();
con.disconnect();
La getInputStream()
me donnera l'erreur 403 accès interdit. J'ai cherché à travers d'autres sujets connexes et sont en réalité profondément encore plus confus qu'avant de les lire. Serions reconnaissants de réponses.
Détails Supplémentaires:
- Je viens juste de instancié le certificat, et n'ont pas de laisser le programme sait toute sorte de clés (privée, publique, etc.). Donc, ce que je crois que je dois présenter à ces touches pour le serveur, de le laisser savoir que je suis effectivement le certificat. Je n'ai absolument aucune idée de comment faire cela, à la fois la logique et la syntaxe sage.
- J'ai essayé la commande keytool pour importer le .p12 cert fichier dans le fichier de clés, mais en quelque sorte, l'-pkcs12 option n'est pas reconnu par l'utilitaire keytool. Aucune idée sur la façon d'utiliser directement cette .p12 cert serait très bien aussi.
- trustAllCert est un élément de tableau de TrustMangers qui ne permet pas de valider quoi que ce soit (faire confiance à tous). Je ne sais pas si je dois continuer à l'utiliser. En fait, maintenant, j'ai effectivement un seul cert à la confiance. Quelle est la bonne façon d'écrire un trustManger dans ce cas?
- Je n'ai pas de contrôle sur le côté serveur. Tous on m'a donné sont l'URL pour accéder à leur site, qui est sous protocole HTTPS, et un .certificat p12. Le site n'a pas de connexion. Si le certificat est installé, je peux y aller.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez tenter de code la configuration SSL, vous pouvez utiliser le fichier P12 donné pour vous, sans avoir à le convertir en un JKS. Aussi, vous aurez besoin d'utiliser la clé privée dans le P12, et pas seulement les certificats que vous avez copié dans le JKS. Vous ne savez pas si cela va répondre à vos besoins directement, mais cela peut vous mettre sur le droit chemin:
De la configuration de la trustStore cette façon est facultatif. Vous pouvez créer un JKS avec tous les certificats de la chaîne de votre P12, ou assurez-vous qu'ils sont dans votre JRE fichier cacerts. Comme pour keytool, pour référence, vous pouvez exécuter l'utilitaire keytool commandes sur P12 (précisez-storetype pkcs12), mais impossible d'importer un P12 dans un JKS. Vous ne pouvez pas exporter simplement une clé à partir d'un P12 avec la commande keytool.
Je n'ai pas de serveurs d'installation au moment de tester ce code, afin de lui donner un coup et de voir si vous recevez toujours l'erreur 403.
sslContext = SSLContext.getInstance("SSL");
à la place.Ajouter cela comme une réponse que j'ai besoin de plus d'espace pour écrire.
Tout d'abord, une question: Est ce que le certificat signé par une autorité de confiance telle que Verisign? Si elle ne l'est pas, le truststore devrait avoir le Certificat d'autorité de certification (généralement une .fichier pem) qui fait le p12 cert "valides". La valeur par défaut de java magasin de confiance contient la plupart (si pas tous) des certificats d'autorité de certification de la grandes entreprises, comme Verisign et Thawte.
Aussi, vous pouvez tester votre application pour se connecter au serveur sécurisé sans codage SSL configuration, mais avec des paramètres de ligne de commande, par exemple:
et puis votre code devient juste
Si vous vous sentez masochiste, le JSSE réf guide est très amusant.
keytool -list -keystore cacerts
dans le même dossier. Je pense que vous pouvez télécharger les certificats d'autorité de certification de Confier à partir de ceci de la page. Vous avez seulement besoin de l'un des certificats, vérifiez que le nom du certificat dans firefox et il devrait y avoir un correspondant dans le site.C'est ce qui a fonctionné pour moi:
Simple commande keytool pour exporter votre .p12 fichier de clés en .jks keystore:
keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore keystore.jks