I am trying to connect to a server using the TCP outbound gateway via SSL. I am making use of a ClientConnectionFactory. I implemented this
I also am using a custom TcpNetSSLSupport where I am trusting all certificates. This is the flow I want to use.
I am getting a “No subject alternative name error”
Please what am I doing wrong?
@Bean
public AbstractClientConnectionFactory nibssClientConnectionFactory() {
TcpNetClientConnectionFactory factory =
new TcpNetClientConnectionFactory("196.6.103.10", 55533);
factory.setSerializer(customIsoMessageSerializer);
factory.setDeserializer(customIsoMessageDeserializer);
factory.setSingleUse(true);
DefaultTcpNetSSLSocketFactorySupport defaultTcpNetSSLSocketFactorySupport = new DefaultTcpNetSSLSocketFactorySupport(customTcpNetSslContextSupport);
factory.setTcpSocketFactorySupport(defaultTcpNetSSLSocketFactorySupport);
return factory;
}
@Bean
@ServiceActivator(inputChannel = "tcpNibssOutgateChannel")
public MessageHandler tcpNibssOutboundGateway() {
TcpOutboundGateway gateway = new TcpOutboundGateway();
gateway.setConnectionFactory(nibssClientConnectionFactory());
gateway.setUnsolicitedMessageChannel(unsolicitedChannel());
return gateway;
}
//CustomTcpNetSSLContextSupport
@Component
public class CustomTcpNetSslContextSupport implements TcpSSLContextSupport {
@Override
public SSLContext getSSLContext() throws GeneralSecurityException, IOException{
SSLContext result;
try {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
result = sslContext;
} catch (NoSuchAlgorithmException | KeyManagementException e) {
throw new RuntimeException("Failed to create SSL context", e);
}
return result;
}
}
javax.net.ssl.SSLHandshakeException: No subject alternative names present
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) ~[na:na]
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:378) ~[na:na]
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321) ~[na:na]
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:316) ~[na:na]
at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:654) ~[na:na]
at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:473) ~[na:na]
at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:369) ~[na:na]
at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396) ~[na:na]
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:480) ~[na:na]
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:458) ~[na:na]
at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:201) ~[na:na]
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172) ~[na:na]
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1510) ~[na:na]
at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1425) ~[na:na]
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455) ~[na:na]
at java.base/sun.security.ssl.SSLSocketImpl.ensureNegotiated(SSLSocketImpl.java:925) ~[na:na]
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1016) ~[na:na]
at java.base/java.io.InputStream.readNBytes(InputStream.java:409) ~[na:na]
at java.base/java.io.InputStream.readAllBytes(InputStream.java:346) ~[na:na]
at com.redtech.terminalmanagement.services.transactionManagement.utils.CustomIsoMessageDeserializer.deserialize(CustomIsoMessageDeserializer.java:62) ~[classes/:na]
at com.redtech.terminalmanagement.services.transactionManagement.utils.CustomIsoMessageDeserializer.deserialize(CustomIsoMessageDeserializer.java:9) ~[classes/:na]
at org.springframework.integration.ip.tcp.connection.TcpNetConnection.getPayload(TcpNetConnection.java:149) ~[spring-integration-ip-6.3.0.jar:6.3.0]
at org.springframework.integration.ip.tcp.connection.TcpMessageMapper.toMessage(TcpMessageMapper.java:176) ~[spring-integration-ip-6.3.0.jar:6.3.0]
at org.springframework.integration.ip.tcp.connection.TcpMessageMapper.toMessage(TcpMessageMapper.java:63) ~[spring-integration-ip-6.3.0.jar:6.3.0]
at org.springframework.integration.mapping.InboundMessageMapper.toMessage(InboundMessageMapper.java:43) ~[spring-integration-core-6.3.0.jar:6.3.0]
at org.springframework.integration.ip.tcp.connection.TcpNetConnection.receiveAndProcessMessage(TcpNetConnection.java:215) ~[spring-integration-ip-6.3.0.jar:6.3.0]
at org.springframework.integration.ip.tcp.connection.TcpNetConnection.run(TcpNetConnection.java:206) ~[spring-integration-ip-6.3.0.jar:6.3.0]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Caused by: java.security.cert.CertificateException: No subject alternative names present
at java.base/sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:142) ~[na:na]
at java.base/sun.security.util.HostnameChecker.match(HostnameChecker.java:101) ~[na:na]
at java.base/sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:458) ~[na:na]
at java.base/sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:432) ~[na:na]
at java.base/sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:1475) ~[na:na]
at java.base/sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1442) ~[na:na]
at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638) ~[na:na]
... 25 common frames omitted
2024-07-13T19:50:41.542+01:00 ERROR 17516 --- [terminal-management] [pool-2-thread-2] o.s.i.ip.tcp.TcpOutboundGateway : Tcp Gateway exception
New contributor
serethewind is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.