Я искал ответ, но не нашел.
Я программирую инструмент синхронизации FTP для Android, я хочу предоставить следующие типы серверов:
- FTP -> Работает
- SFTP -> Работы
- FTPS -> больше не работает
Я использую библиотеку apache commons net, в начале в версии 2.2 теперь я проверял 3.0.1, а также снимок 3.1, но проблема не исчезла.
Сообщение об ошибке:
W/System.err( 433): javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2672b0: Failure in SSL library, usually a protocol error
W/System.err( 433): error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol (external/openssl/ssl/s23_srvr.c:589 0xad12959f:0x00000000)
W/System.err( 433): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
W/System.err( 433): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:474)
W/System.err( 433): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:328)
W/System.err( 433): at org.apache.commons.net.ftp.FTPSClient.sslNegotiation(FTPSClient.java:259)
W/System.err( 433): at org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:200)
W/System.err( 433): at org.apache.commons.net.SocketClient.connect(SocketClient.java:169)
W/System.err( 433): at org.apache.commons.net.SocketClient.connect(SocketClient.java:189)
W/System.err( 433): at com.syncoorp.FTPSyncX_Pro.server.FTPSServer.remoteConnect(FTPSServer.java:87)
Я не знаю, что я могу сделать сейчас, чтобы решить эту проблему, и я не хочу говорить своим клиентам, что они могут использовать только FTPS на Android <2.3 </p>
мой код для подключения:
client = new FTPSClient(implictSSL);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(KeyStore.getInstance("BKS"), "wshr.ut".toCharArray());
client.setTrustManager(new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; }
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { }
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { }
});
client.setKeyManager(kmf.getKeyManagers()[0]);
client.setNeedClientAuth(false);
client.setUseClientMode(false);
if(timeout > 0) {
client.setConnectTimeout(timeout);
client.setDataTimeout(timeout);
client.setDefaultTimeout(timeout);
}
client.connect(values.host, values.port);
Кто-нибудь знает что-нибудь, как это исправить или есть обходной путь?
С наилучшими пожеланиями,
PrDatur