2009-06-08 5 views
0

Le serveur TLS accepte la connexion du client, même cetificate client n'est pas présent dans le fichier de clés certifiées du serveur. Pourquoi?Le serveur TLS accepte la connexion du client même client cetificate n'est pas présent dans le fichier de clés certifiées des serveurs? Pourquoi?

Code Serveur:

tlsContext = SSLContext.getInstance(SSL_PROTOCOL); 
tlsContext.init(getMyKeyManagers(),null,null); 
SSLServerSocketFactory fact = tlsContext.getServerSocketFactory(); 
tlsServerSock = (SSLServerSocket)fact.createServerSocket(); 
tlsServerSock.setNeedClientAuth(true); 
tlsServerSock.setWantClientAuth(true); 
tlsServerSock.bind(objSocketAddress); 

et commencer à écouter sur le code socket serveur

Code client:

SSLContext tlsContext = SSLContext.getInstance(SSL_PROTOCOL); 
tlsContext.init(getMyKeyManagers(), getMyTrustManagers(), null); 
SSLSocketFactory fact = tlsContext.getSocketFactory(); 
socket = fact.createSocket(); 
socket.connect(objSocketAddress); 

code décrit, il n'y a pas TrustManagers ajouté au côté serveur toujours l'authentification du client est réussi. pourquoi est-ce?

+0

Le certificat client est nécessaire uniquement dans le fichier de clés certifiées du serveur s'il est auto-signé. – EJP

Répondre

-1

S'il n'y a pas de gestionnaire de confiance, un certificat client est nécessaire. Une autre posebillity est que l'un des émetteurs du certificat client est présent dans le truststore sur le serveur

+0

est-ce comme si truststore @ côté serveur a la valeur NULL alors tout client anonyme sera en mesure de se connecter et il n'y aura pas d'authentification client même si nous l'avons mis à vrai. –

0

Je sais que cette question a été posée il y a un certain temps tout à fait, mais encore ;-)

Deux raisons possibles: Vous avez pas encore un gestionnaire de confiance pour que les « fournisseurs de sécurité installés seront recherchées pour la mise en œuvre de la plus haute priorité de l'usine appropriée "(tiré du Javadoc). Peut-être avez-vous installé un gestionnaire de confiance en acceptant accidentellement tout.

Votre client peut également ne pas tenter d'effectuer l'authentification du client TLS, car vous avez configuré l'exigence pour qu'elle soit facultative en définissant setWantClientAuth sur true. Cela a probablement écrasé le paramètre que vous avez fait la ligne ci-dessus setNeedClientAuth à true. La première permet au serveur de dire au client "si vous avez un certificat pour moi, envoyez le s'il vous plaît" tandis que le dernier dit "si vous n'avez pas de certificat, n'essayez même pas ...". Si, pour une raison quelconque, le gestionnaire de clés configuré ne fournit pas de certificat et de clé privée pour l'authentification du client TLS, l'établissement de liaison TLS réussira.

L'utilisation d'un sniffer TCP (par exemple Wireshark) devrait aider à voir si l'authentification du client TLS a réellement lieu. Vous pouvez également définir la propriété système -Djavax.net.debug=all et lire beaucoup de sorties de débogage sur STDOUT (voir Debugging SSL/TLS Connections pour en savoir plus)

Questions connexes