Impossible de se connecter en SSL webservice avec cxf http-conduit
Je suis en train d'essayer de vous connecter à un webservice SOAP et de la nécessité de fournir un certificat d'authentification. Je suis actuellement en utilisant le cxf http conduit à localiser mon certificat. J'ai reçu un fichier p12 du service, je suis désireux de faire appel. J'ai importé le p12 dans un jks. J'ai mis le jks dans le chemin de classe avec mes cxf.xml page. J'ai modifié mon web.xml pour contenir le context-param et de l'auditeur de la classe, mais je suis encore en train de journaux à partir du serveur de dire non certificat fourni. J'ai regardé partout pour des solutions mais rien n'a fonctionné jusqu'ici. Toute aide est grandement appréciée
CXF.XML
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sec="http://cxf.apache.org/configuration/security"
xmlns:http="http://cxf.apache.org/transports/http/configuration"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xsi:schemaLocation="
http://cxf.apache.org/configuration/security
http://cxf.apache.org/schemas/configuration/security.xsd
http://cxf.apache.org/transports/http/configuration
http://cxf.apache.org/schemas/configuration/http-conf.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<http:conduit name="*.http-conduit">
<http:tlsClientParameters>
<sec:keyManagers keyPassword="changeit">
<sec:keyStore type="JKS" password="changeit"
resource="myKeystore.jks"
/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="changeit"
resource="myKeystore.jks"/>
</sec:trustManagers>
<sec:cipherSuitesFilter>
<!-- these filters ensure that a ciphersuite with
export-suitable or null encryption is used,
but exclude anonymous Diffie-Hellman key change as
this is vulnerable to man-in-the-middle attacks -->
<sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_AES_.*</sec:include>
<sec:include>.*_WITH_NULL_.*</sec:include>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
<http:client AutoRedirect="true" Connection="Keep-Alive"/>
</http:conduit>
</beans>
WEB.XML
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:cxf.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
Vous devez vous connecter pour publier un commentaire.
Je suis d'accord avec @hooknc dernier commentaire. Assurez-vous que votre fichier de clés contient la clé privée de l'entrée. Aussi, définir privatekey mot de passe égale à mot de passe du fichier de clés. Vous pouvez tester votre service avec code ci-dessous. Je l'ai écrit pour cxf version 3.0.0-milestone2, parce que j'ai besoin de plusieurs signatures, mais je pense que le code devrait fonctionner également avec la version stable de la branche 2.x
Je ne crois pas, juste de mettre le truststore (jks) dans votre classpath fonctionnera de la façon dont vous pensez qu'elle le fera. Je suis assez confiant que vous devrez appeler un de nos le truststore que vous souhaitez utiliser via vm options.
Ajoutez -Djavax.net.le protocole ssl.trustStore={file_path_to_your_jks} à votre application VM arguments. Vous pourriez aussi avoir besoin d'utiliser -Djavax.net.le protocole ssl.trustStorePassword={your_jks_password} si le mot de passe par défaut de 'changeit" n'était pas utilisé.