Konfigurieren von client-Authentifizierung mit apache.Unterhaus.net.ftps?
Implementiert habe ich einen FTPS-client (FTP über SSL/TLS) in java unter Verwendung der apache.commons.net-framework.
Es ist dazu konfiguriert explizite Sicherheit auf dem Standard-port 21.
ftpsClient = new FTPSClient(false);
ftpsClient.setTrustManager(getConfiguration().getCertificatesManager());
ftpsClient.connect(getConfiguration().getHostName(), getConfiguration().getPort());
Solange ich nicht erzwingen-client-Authentifizierung auf dem server, funktioniert alles einwandfrei.
Aber ich brauche, um zu ermöglichen, client-Authentifizierung, so dass ich erzwingen, auf dem server und konfiguriert die client-system Eigenschaften:
-Djavax.net.ssl.keyStore="D:/.../ftps-client-auth.keystore"
-Djavax.net.ssl.keyStorePassword="*****"
-Djavax.net.ssl.keyStoreType=JKS
Was ich bekam, war das gleiche, als wenn ich nicht die system Eigenschaften:
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)
Server-log sagt:
DEBUG: Client "<my ip address>", "SSL_accept failed: error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate"
Scheint Recht - ich aktiviert -Djavax.net.debug=all, was zeigt, dass sich der server sendet eine Liste von ZNS-Sie akzeptiert, aber der client sendet ein leeres Zertifikat-Kette.
- Was habe ich falsch gemacht?
- Muss ich tun, einige Konfigurations-Programm?
- Tun, die Zertifikate oder private Schlüssel unterstützen müssen, etwas besonderes für SSL/TLS?
ein Kollege Einrichtung eines vsftp-server mit client-Authentifizierung. Leider weiß ich nicht, welche Einstellungen er verwendet.
I ' lll sich dann Andy. Danke für die Antwort!
InformationsquelleAutor Andy | 2012-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es herausgefunden: Sie brauchen, um programmgesteuert einen
KeyManager
.Setzen der system-properties (
-Djavax.net.ssl.keyStore
, ...) ist nicht ausreichend, da die Rahmen nicht benutzen, SonnenSSLSocketFactory
.Beispiel:
Möchten Sie vielleicht wählen Sie eine andere Trust-Manager, z.B., basiert auf einer Java-keystore. Die Werkzeuge bieten eine Methode für die, auch:
TrustManagerUtils.getDefaultTrustManager(keystore)
getConfiguration ?? wo finden Sie es?
Ich aktualisiert die Beispiel. Werfen Sie einen Blick auf TrustManagerUtils eine Instanz zu schaffen.
InformationsquelleAutor Andy