getAttribute(“javax.servlet.demande.X509Certificate”) non réglé (Printemps,CXF,la Jetée,JAX-RSv1.1)

Mon client implémente les Deux sens SSL de la manière suivante:

 
private final static String KEYSTORE = "/security/client.jks"; 
private final static String KEYSTORE_PASSWORD = "secret"; 
private final static String KEYSTORE_TYPE = "JKS"; 
private final static String TRUSTSTORE = "/sécurité/certificats.jks"; 
private final static String TRUSTSTORE_PASSWORD = "secret"; 
private final static String TRUSTSTORE_TYPE = "JKS"; 
... 
Fichier de clés keystore = fichier de clés.getInstance(KEYSTORE_TYPE); 
FileInputStream keystoreInput = new FileInputStream(new File(fichier de stockage des clés)); 
fichier de stockage des clés.charge(keystoreInput, KEYSTORE_PASSWORD.toCharArray()); 
Fichier de clés truststore = fichier de clés.getInstance(TRUSTSTORE_TYPE); 
FileInputStream truststoreIs = new FileInputStream(new File(TRUSTSTORE)); 
truststore.charge(truststoreIs, TRUSTSTORE_PASSWORD.toCharArray()); 
SSLSocketFactory socketFactory = new SSLSocketFactory(fichier de stockage des clés, KEYSTORE_PASSWORD, truststore); 
Régime de régime = nouveau Régime("https", 8543, socketFactory); 
SchemeRegistry registre = new SchemeRegistry(); 
de registre.registre(schéma); 
ClientConnectionManager ccm = new PoolingClientConnectionManager(registre); 
httpclient = new DefaultHttpClient(ccm); 
HttpResponse response = null; 
HttpGet httpget = new HttpGet("https://mylocalhost.com:8543/test"); 
response = httpclient.execute(httpget); 
... 

Et j'essaie de récupérer le X. 509 certificate sur le côté du serveur par le client via javax.servlet.http.HttpServletRequest.getAttribute("javax.servlet.demande.X509Certificate") comme il est décrit ici: http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletRequest.html#getAttribute%28java.lang.String%29.

- Je obtenir le HttpServletRequest sur le côté du serveur via:

HttpServletRequest servletRequest = (HttpServletRequest) msg.get("HTTP".La REQUÊTE"); via le handleMessage(Message msg) méthode de mon intercepteur de classe qui s'étend AbstractPhaseInterceptor<Message>. J'ai utiliser JAX-RS 1.1.1 sur le côté du serveur à cause de certaines dépendances Maven dont je ne suis pas autorisé à changer et donc je ne peut pas utiliser ContainerRequestFilter (pris en charge à partir de JAX-RS 2.0 sur).

Mon problème est que getAttribute("javax.servlet.demande.X509Certificate") sur le côté du serveur renvoie la valeur nulle de tous les temps. Si j'ai vérifier le trafic entre le serveur et le client, je peux voir que le certificat du serveur est envoyé au client, que la poignée de main d'œuvres. Mais je ne vois pas que le certificat client est envoyé sur le serveur et je pense que c'est la raison pour laquelle getAttribute("javax.servlet.request.X509Certificate") retourne null. Quelqu'un sait comment je peux résoudre ce problème? J'ai essayé quelques autres implémentations du côté du client déjà, mais sans changement.

Ce que je fais mal? Merci beaucoup d'avance!

Informations supplémentaires: j'ai vu sur le côté du serveur qui javax.servlet.demande.ssl_session_id, javax.servlet.demande.key_size et javax.servlet.demande.cipher_suite sont ensemble, mais la clé javax.servlet.demande.X509Certificate n'est pas définie. Je suis en utilisant le Serveur Jetty 8.1.15, Apache CXF 2.7.x et JAX-RS 1.1.1. J'ai essayé avec de la Jetée de configuration via http://cxf.apache.org/docs/jetty-configuration.html et http://cxf.apache.org/docs/secure-jax-rs-services.html#SecureJAX-RSServices-Configuringendpoints, l'attribut n'est toujours pas réglé.

  • Le suggère le titre que vous souhaitez signer la demande HTTPS, le contenu de la question, on dirait que vous essayez d'utiliser un certificat client. Ceux sont des choses différentes.
  • Salut Bruno, un client doit être authentifié par le serveur via X. 509 certificate. Je veux extraire les X. 509 certificat de sorte que le serveur peut comparer le certificat avec ses truststore. Je ne pouvais pas savoir encore si le problème est du côté du client ou du côté serveur. Donc, ma question peut-être un peu imprécise. S'il vous plaît garder avec moi, je suis un débutant ici. Merci beaucoup! J'ai ajouté des informations supplémentaires ci-dessus.