Comment faire pour configurer l'authentification du client avec apache.commons.net.ftps?

J'ai mis en place un client FTPS (FTP sur SSL/TLS) en java à l'aide de la apache.commons.net-cadre.
Il est configuré pour faire de la sécurité explicite sur le port par défaut 21.

ftpsClient = new FTPSClient(false);
ftpsClient.setTrustManager(getConfiguration().getCertificatesManager());
ftpsClient.connect(getConfiguration().getHostName(), getConfiguration().getPort());

Tant que je ne les appliquent pas client d'authentification sur le serveur, tout fonctionne bien.
Mais j'ai besoin d'activer le client d'authentification, donc je l'appliquer sur le serveur et configuré le client-propriétés du système:

-Djavax.net.ssl.keyStore="D:/.../ftps-client-auth.keystore"
-Djavax.net.ssl.keyStorePassword="*****"
-Djavax.net.ssl.keyStoreType=JKS

Ce que j'ai obtenu est le même que si je n'ai pas les propriétés du système:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1806)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:986)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1170)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1197)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1181)
    at org.apache.commons.net.ftp.FTPSClient.sslNegotiation(FTPSClient.java:265)
    at org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:207)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:172)
    at org.apache.commons.net.SocketClient.connect(SocketClient.java:192)

Le serveur-journal dit:

DEBUG: Client "<my ip address>", "SSL_accept failed: error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate"

Semble droit - j'ai activé -Djavax.net.debug=tous les, ce qui montre que le serveur envoie une liste de la CNs, il accepte, mais le client envoie un vide de la chaîne de certification.

  • Qu'ai-je fait de mal?
  • Dois-je faire un peu de configuration par programmation?
  • Faire de certificats ou de la clé privée nécessité de soutenir quelque chose de spécial pour SSL/TLS?
Comment avez-vous mis en place votre serveur? Ayant des troubles de la configuration d'un serveur qui applique le protocole SSL et l'authentification du client. Toute aide à ce que vous avez utilisé pour configurer?
un collègue configurer un serveur vsftp avec l'authentification du client. Malheureusement, je ne connais pas les réglages qu'il a utilisé.
Je'lll regarder dans que puis Andy. Merci pour la réponse!

OriginalL'auteur Andy | 2012-11-20