diff --git a/src/main/java/com/sparrowwallet/sparrow/net/ProxyTcpOverTlsTransport.java b/src/main/java/com/sparrowwallet/sparrow/net/ProxyTcpOverTlsTransport.java index d865f874..135f1635 100644 --- a/src/main/java/com/sparrowwallet/sparrow/net/ProxyTcpOverTlsTransport.java +++ b/src/main/java/com/sparrowwallet/sparrow/net/ProxyTcpOverTlsTransport.java @@ -33,7 +33,7 @@ public class ProxyTcpOverTlsTransport extends TcpOverTlsTransport { InetSocketAddress proxyAddr = new InetSocketAddress(proxy.getHost(), proxy.getPortOrDefault(DEFAULT_PROXY_PORT)); socket = new Socket(new Proxy(Proxy.Type.SOCKS, proxyAddr)); socket.connect(InetSocketAddress.createUnresolved(server.getHost(), server.getPortOrDefault(getDefaultPort()))); - socket = sslSocketFactory.createSocket(socket, proxy.getHost(), proxy.getPortOrDefault(DEFAULT_PROXY_PORT), true); + socket = sslSocketFactory.createSocket(socket, server.getHost(), server.getPortOrDefault(getDefaultPort()), true); startHandshake((SSLSocket)socket); } } diff --git a/src/main/java/com/sparrowwallet/sparrow/net/TcpOverTlsTransport.java b/src/main/java/com/sparrowwallet/sparrow/net/TcpOverTlsTransport.java index 06cd3da0..791626df 100644 --- a/src/main/java/com/sparrowwallet/sparrow/net/TcpOverTlsTransport.java +++ b/src/main/java/com/sparrowwallet/sparrow/net/TcpOverTlsTransport.java @@ -20,6 +20,7 @@ public class TcpOverTlsTransport extends TcpTransport { public static final int PAD_TO_MULTIPLE_OF_BYTES = 96; protected final SSLSocketFactory sslSocketFactory; + protected final boolean usingCaTrust; public TcpOverTlsTransport(HostAndPort server) throws NoSuchAlgorithmException, KeyManagementException, CertificateException, KeyStoreException, IOException { super(server); @@ -27,8 +28,10 @@ public class TcpOverTlsTransport extends TcpTransport { TrustManager[] trustManagers; if(Storage.getCaCertificateFile(server.getHost()) != null) { trustManagers = getCaTrustManagers(); + this.usingCaTrust = true; } else { trustManagers = getTrustManagers(Storage.getCertificateFile(server.getHost()), server.getHost()); + this.usingCaTrust = false; } SSLContext sslContext = SSLContext.getInstance("TLS"); @@ -40,6 +43,7 @@ public class TcpOverTlsTransport extends TcpTransport { public TcpOverTlsTransport(HostAndPort server, File crtFile) throws IOException, CertificateException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException { super(server); + this.usingCaTrust = false; TrustManager[] trustManagers = getTrustManagers(crtFile, server.getHost()); SSLContext sslContext = SSLContext.getInstance("TLS"); @@ -148,6 +152,12 @@ public class TcpOverTlsTransport extends TcpTransport { } }); + if(usingCaTrust && !Protocol.isOnionAddress(server)) { + SSLParameters sslParameters = sslSocket.getSSLParameters(); + sslParameters.setEndpointIdentificationAlgorithm("HTTPS"); + sslSocket.setSSLParameters(sslParameters); + } + sslSocket.startHandshake(); }