changeset 800:09f463444dde monetdbs

TLS support in its most basic form
author Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
date Thu, 07 Dec 2023 11:21:39 +0100 (16 months ago)
parents 117e7917325d
children 88b3e8e89126
files src/main/java/org/monetdb/mcl/net/MapiSocket.java src/main/java/org/monetdb/mcl/net/SecureSocket.java
diffstat 2 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/monetdb/mcl/net/MapiSocket.java
+++ b/src/main/java/org/monetdb/mcl/net/MapiSocket.java
@@ -345,7 +345,7 @@ public final class MapiSocket {
 		con = sock;
 	}
 
-	private Socket wrapTLS(Socket sock, Target.Validated validated) throws MCLException {
+	private Socket wrapTLS(Socket sock, Target.Validated validated) throws IOException {
 		if (validated.getTls())
 			return SecureSocket.wrap(validated, sock);
 		return sock;
--- a/src/main/java/org/monetdb/mcl/net/SecureSocket.java
+++ b/src/main/java/org/monetdb/mcl/net/SecureSocket.java
@@ -1,9 +1,22 @@
 package org.monetdb.mcl.net;
 
+import org.monetdb.mcl.MCLException;
+
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
+import java.io.IOException;
 import java.net.Socket;
 
 public class SecureSocket {
-    public static Socket wrap(Target.Validated validated, Socket sock) {
-        throw new MCLException("TLS connections (monetdbs://) are not supported yet");
+    public static Socket wrap(Target.Validated validated, Socket inner) throws IOException {
+        SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
+        String host = validated.connectTcp();
+        int port = validated.connectPort();
+        boolean autoclose = true;
+        SSLSocket sock = (SSLSocket) factory.createSocket(inner, host, port, autoclose);
+        sock.setUseClientMode(true);
+
+        sock.startHandshake();
+        return sock;
     }
 }