7
votes

Comment puis-je signer une demande HTTP avec un certificat X.509 en Java?

Comment exécuter une requête HTTP et la signer avec un certificat X.509 à l'aide de Java?

Je programme habituellement en C #. Maintenant, ce que je voudrais faire est quelque chose de similaire à celui qui suit, uniquement en Java: xxx

en java j'ai créé un java.security.cert.x509Certificate instance mais je ne peux pas comprendre comment l'associer à une demande HTTP. Je peux créer une demande HTTP à l'aide d'une instance Java.net.url, mais je ne semble pas pouvoir associer mon certificat avec cette instance (et je ne sais pas si l'utilisation de Java.net.url est même appropriée).


1 commentaires

L'une de ces suggestions fonctionnait-elle?


3 Réponses :


1
votes

Je recommanderais la source Open Source bibliothèque httpClient de Apache Commons. Couvre ce cas d'utilisation et beaucoup d'autres.


1 commentaires

Fixé. J'espère que ça aide!



2
votes

Je ne suis pas un programmeur C #, mais je présume que le code fait un appel via HTTPS / TLS et fournit un certificat client pour l'authentification? Aka, vous ne demandez pas comment utiliser WS-Security, droit?

Dans ce cas, je pense que les réponses et ici sera utile pour vous. Vous devez utiliser un utilitaire OpenSSL pour importer votre certificat dans un keystore client p12. Si votre serveur utilise un CA non standard ou certificat auto-signé, vous devez configurer un client avec truststore ces certificats ainsi.

À ce stade, regardez les questions que j'ai Linked: vous devez spécifier toute une série d'arguments JVM. Enfin, essayez de faire appel à nouveau (en utilisant des objets Java standard ou httpclient). Le client doit accepter le serveur cert si votre truststore est correcte et que le serveur doit demander un certificat client. Si votre keystore est correctement configuré, le client avec l'authentification avec le certificat client X.509 et vous serez bon d'aller.


0 commentaires

1
votes

On dirait que vous essayez d'utiliser HTTPS avec une authentification de certificat client. Je suppose que votre serveur est configuré pour demander ceci (car le certificat client ne peut être demandé que par le serveur).

en Java, java.security.cert.x509Certificate est vraiment juste le Certificat (un certificat de clé publique, sans la clé privée). Ce dont vous avez besoin sur le côté client consiste à configurer la clé privée avec elle. En supposant que votre clé privée et votre certificat soient dans un keyStore (pour simplifier, je suppose qu'il n'y a qu'un certificat approprié avec sa clé privée, peut-être avec d'autres certificats de la chaîne, dans ce keyStore) et que vous utilisez la valeur par défaut. Free Store: xxx

Autres bibliothèques vous permettra de définir le SSLContext ou le keyStore légèrement différemment, mais les principes devrait être la même.

(vous pouvez également utiliser le javax.net.ssl.keystore Propriétés du système si c'est approprié.)


0 commentaires