Romain Moreau created JAMES-4045:
------------------------------------
Summary: Executing TLS a lot of times and will sometimes result in
an exception
Key: JAMES-4045
URL: https://issues.apache.org/jira/browse/JAMES-4045
Project: James Server
Issue Type: Bug
Components: SMTPServer
Affects Versions: 3.9.0
Reporter: Romain Moreau
With a {{{}SMTPSClient{}}}, if you try many times to {{{}connect{}}}, {{EHLO}}
then {{{}execTLS{}}}, {{execTLS}} will sometimes throw an exception.
This can be reproduced by simply adding a loop to this existing test:
{code:java}
@Test
void startTlsShouldReturnTrueWhenServerSupportsIt() throws Exception {
server = createServer(createProtocol(Optional.empty()),
Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
smtpsClient = createClient();
server.bind();
for (var i = 0; i < 5_000; i++) {
InetSocketAddress bindedAddress = new
ProtocolServerUtils(server).retrieveBindedAddress();
smtpsClient.connect(bindedAddress.getAddress().getHostAddress(),
bindedAddress.getPort());
smtpsClient.sendCommand("EHLO localhost");
boolean execTLS = smtpsClient.execTLS();
assertThat(execTLS).isTrue();
}
}
{code}
When the issue happens, the SMTP server seems to close the connection
unexpectedly and {{execTLS}} will fail with the following exception:
{noformat}
javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
at java.base/sun.security.ssl.SSLSocketImpl.handleEOF(SSLSocketImpl.java:1715)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1515)
at
java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1422)
at
java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455)
at
java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426)
at
org.apache.commons.net.smtp.SMTPSClient.performSSLNegotiation(SMTPSClient.java:300)
at org.apache.commons.net.smtp.SMTPSClient.execTLS(SMTPSClient.java:197)
at
org.apache.james.protocols.smtp.netty.NettyStartTlsSMTPServerTest.startTlsShouldReturnTrueWhenServerSupportsIt(NettyStartTlsSMTPServerTest.java:169)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at
java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:494)
at
java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:483)
at
java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:160)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:111)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1507)
... 74 more
{noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]