У меня есть следующий код, который работает правильно в TLS 1.2, но не сбои в TLS 1.3
он просто открывает сокет, отправляет некоторые данные, а затем закрывает их.
, но это в TLS 1.3 вызывает его сбое на стороне сервера на сокете, близком к сокетию. Следует заставить его работать так же, как это, но это тоже не работает.
Это самая основная реализация, поэтому я не уверен, как именно она будет работать? Я имею в виду, что для клиента должен быть способ сделать это, отправить данные один раз и закрыть сокет. < /p>
java.net.SocketException: An established connection was aborted by the software in your host machine
at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:330)
at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:355)
at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:808)
at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966)
at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:484)
at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:478)
at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1465)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1069)
at java.base/java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2897)
at java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2913)
at java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3410)
at java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:954)
at java.base/java.io.ObjectInputStream.(ObjectInputStream.java:392)
at TestChallenge/scratch.OO.lambda$main$0(OO.java:36)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger)
at java.base/java.util.concurrent.FutureTask.(FutureTask.java:151)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.(ScheduledThreadPoolExecutor.java:215)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:561)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor.execute(ScheduledThreadPoolExecutor.java:705)
at TestChallenge/scratch.OO.main(OO.java:30)
< /code>
public class OO {
public static void main(String[] args) throws Exception {
enum STATE {
CURR
}
final SSLContext sslContext = getSslContext();
final ServerSocketFactory serverSocketFactory = sslContext.getServerSocketFactory();
final SSLServerSocket serverSocket = (SSLServerSocket) serverSocketFactory.createServerSocket(1888);
final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(20);
scheduledExecutorService.execute(() -> {
while (!serverSocket.isClosed()) {
try {
final SSLSocket socket = (SSLSocket) serverSocket.accept();
try {
try(final InputStream inputStream = socket.getInputStream()){
final ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
final Object o = objectInputStream.readObject();
System.out.println(o);
}
} catch (IOException e) {
e.printStackTrace();
}
// socket.setSoLinger(true,10);
} catch (Exception e) {
e.printStackTrace();
}
}
});
final javax.net.SocketFactory socketFactory = sslContext.getSocketFactory();
scheduledExecutorService.scheduleWithFixedDelay(() -> {
try {
try (final SSLSocket socket = (SSLSocket) socketFactory.createSocket("127.0.0.1", 1888)) {
// socket.setSoLinger(true,10);
socket.startHandshake();
final OutputStream outputStream = socket.getOutputStream();
try (final ObjectOutputStream oo = new ObjectOutputStream(socket.getOutputStream())) {
oo.writeObject(STATE.CURR);
outputStream.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}, 0, 1, TimeUnit.SECONDS);
new CountDownLatch(1).await();
}
@NotNull
public static SSLContext getSslContext() throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException, KeyManagementException {
final KeyStore keyStore = KeyStore.getInstance("pkcs12");
final String s1 ="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";//
final byte[] decode = Base64.getDecoder().decode(s1.getBytes());
try (final InputStream inputStream = new ByteArrayInputStream(decode)) {///Files.newInputStream(path)
keyStore.load(inputStream, "".toCharArray());
}
final KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keyStore, "".toCharArray());
final KeyManager[] keyManagers = kmf.getKeyManagers();
final TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
final TrustManager[] trustManagers = tmf.getTrustManagers();
String s = "TLSv1.3";
// s = "TLSv1.2";
///s="TLS";
final SSLContext sslContext = SSLContext.getInstance(s);
sslContext.init(keyManagers, trustManagers, new SecureRandom());
return sslContext;
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... connection