diff --git a/pom.xml b/pom.xml index e067050..8d7b185 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,12 @@ ${junit-jupiter.version} test + + io.netty + netty-tcnative-boringssl-static + 2.0.59.Final + + diff --git a/src/main/java/cx/lehmann/gemini/gemini/MainVerticle.java b/src/main/java/cx/lehmann/gemini/gemini/MainVerticle.java index 6df4970..66d3fed 100644 --- a/src/main/java/cx/lehmann/gemini/gemini/MainVerticle.java +++ b/src/main/java/cx/lehmann/gemini/gemini/MainVerticle.java @@ -1,9 +1,18 @@ package cx.lehmann.gemini.gemini; +import java.security.cert.Certificate; +import java.util.List; + +import javax.net.ssl.SSLPeerUnverifiedException; + import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; +import io.vertx.core.http.ClientAuth; import io.vertx.core.net.NetServerOptions; +//import io.vertx.core.net.OpenSSLEngineOptions; import io.vertx.core.net.PemKeyCertOptions; +import io.vertx.core.net.PemTrustOptions; +import io.vertx.core.net.TrustOptions; public class MainVerticle extends AbstractVerticle { @@ -13,29 +22,37 @@ public class MainVerticle extends AbstractVerticle { String certPath="c:/temp/cert.pem"; + TrustOptions trustOptions=new PemTrustOptions(); options.setPemKeyCertOptions(new PemKeyCertOptions() .setCertPath(certPath) .setKeyPath(certPath)) - .setSsl(true); -// .setClientAuth(ClientAuth.REQUEST); + .setSsl(true) +// .setTrustOptions(trustOptions) +// .setOpenSslEngineOptions(new OpenSSLEngineOptions()) + .setClientAuth(ClientAuth.REQUIRED); vertx.createNetServer(options).connectHandler(conn -> { conn.handler(event -> { + System.out.println("accepted connection:"+conn.remoteAddress()); String url=event.toString("UTF-8"); if(!url.endsWith("\r\n")) { conn.write("40 format error\r\n"); conn.close(); } else { url=url.substring(0, url.length()-2); +// conn.write("60 cert required\r\n"); conn.write("20 text/gemini\r\n"); - conn.write(url); + conn.write("url:"+url); conn.write("\n"); -// try { -// conn.write(conn.peerCertificates().toString()); -// } catch (SSLPeerUnverifiedException ex) { -// // TODO Auto-generated catch block -// ex.printStackTrace(); -// } + try { + List certs=conn.peerCertificates(); + System.out.println("get certs"); + System.out.println("number of certs:"+certs.size()); + Certificate cert=certs.get(0); + conn.write(cert.toString()); + } catch (SSLPeerUnverifiedException ex) { + ex.printStackTrace(); + } conn.close(); } } diff --git a/src/test/java/cx/lehmann/gemini/gemini/TestMainVerticle.java b/src/test/java/cx/lehmann/gemini/gemini/TestMainVerticle.java index 907fd8b..071d98b 100644 --- a/src/test/java/cx/lehmann/gemini/gemini/TestMainVerticle.java +++ b/src/test/java/cx/lehmann/gemini/gemini/TestMainVerticle.java @@ -10,14 +10,14 @@ import org.junit.jupiter.api.extension.ExtendWith; @ExtendWith(VertxExtension.class) public class TestMainVerticle { - @BeforeEach - void deploy_verticle(Vertx vertx, VertxTestContext testContext) { - vertx.deployVerticle(new MainVerticle(), testContext.succeeding(id -> testContext.completeNow())); - } - - @Test - void verticle_deployed(Vertx vertx, VertxTestContext testContext) throws Throwable { - vertx.setTimer(10000000, l -> - testContext.completeNow()); - } +// @BeforeEach +// void deploy_verticle(Vertx vertx, VertxTestContext testContext) { +// vertx.deployVerticle(new MainVerticle(), testContext.succeeding(id -> testContext.completeNow())); +// } +// +// @Test +// void verticle_deployed(Vertx vertx, VertxTestContext testContext) throws Throwable { +// vertx.setTimer(10000000, l -> +// testContext.completeNow()); +// } }