Rumah >Java >javaTutorial >Bagaimana untuk Menggunakan Semula Sesi TLS untuk Sambungan Data dalam FTPS dengan Apache Commons Net?
Cara Menyambung ke Pelayan FTPS dengan Sambungan Data Menggunakan Sesi TLS yang Sama
Pelaksanaan FTPS Net Apache Commons tidak menggunakan semula TLS secara automatik sesi untuk sambungan data apabila menyambung ke pelayan FTPS tertentu. Ini boleh menyebabkan ralat jabat tangan TLS apabila sambungan data dicuba.
Untuk memastikan sambungan data menggunakan sesi TLS yang sama seperti sambungan kawalan:
@Override protected void _prepareDataSocket_(final Socket socket) { if(preferences.getBoolean("ftp.tls.session.requirereuse")) { if(socket instanceof SSLSocket) { // Control socket is SSL final SSLSession session = ((SSLSocket) _socket_).getSession(); if (session.isValid()) { final SSLSessionContext context = session.getSessionContext(); context.setSessionCacheSize(preferences.getInteger("ftp.ssl.session.cache.size")); try { final Field sessionHostPortCache = context.getClass().getDeclaredField("sessionsByHostAndPort"); sessionHostPortCache.setAccessible(true); final Object cache = sessionHostPortCache.get(context); final Method putMethod = cache.getClass().getDeclaredMethod("put", Object.class, Object.class); putMethod.setAccessible(true); Method getHostMethod; try { getHostMethod = socket.getClass().getMethod("getPeerHost"); } catch (NoSuchMethodException e) { // Running in IKVM getHostMethod = socket.getClass().getDeclaredMethod("getHost"); } getHostMethod.setAccessible(true); Object peerHost = getHostMethod.invoke(socket); putMethod.invoke(cache, String.format("%s:%s", peerHost, socket.getPort()).toLowerCase(Locale.ROOT), session); } catch (NoSuchFieldException e) { // Not running in expected JRE log.warn("No field sessionsByHostAndPort in SSLSessionContext", e); } catch (Exception e) { // Not running in expected JRE log.warn(e.getMessage()); } } else { log.warn(String.format("SSL session %s for socket %s is not rejoinable", session, socket)); } } } }
System.setProperty("jdk.tls.useExtendedMasterSecret", "false");
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Semula Sesi TLS untuk Sambungan Data dalam FTPS dengan Apache Commons Net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!