在HTTPS中使用javax.xml.ws.Endpoint

我正在研究控制建筑物的光和热的项目。后端(用Java编写)将在Mac Mini上运行,并且应该可以通过SOAP进行访问。

我希望将此项目的复杂性降至最低,因为我不希望每个使用它的人都必须设置应用程序服务器。所以到目前为止,我一直使用javax.xml.ws.Endpoint:

 Endpoint endpoint = Endpoint.create(frontendInterface);

String uri = "http://"+config.getHost()+":"+config.getPort()+config.getPath();

endpoint.publish(uri);

这样的效果出奇的好(嘿,您什么时候最后一次只用3行代码看到Java中的东西?),但是现在我正在寻找一种使用HTTPS而不是HTTP的方法。

有没有可以在不使用应用程序服务器的情况下执行此操作的方法,还是有另一种方法可以保护此连接的安全?

问候,Marek

回答:

对于服务器:

SSLContext ssl = SSLContext.getInstance("TLS");

KeyManagerFactory keyFactory = KeyManagerFactory .getInstance(KeyManagerFactory.getDefaultAlgorithm());

KeyStore store = KeyStore.getInstance("JKS");

store.load(new FileInputStream(keystoreFile),keyPass.toCharArray());

keyFactory.init(store, keyPass.toCharArray());

TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

trustFactory.init(store);

ssl.init(keyFactory.getKeyManagers(),

trustFactory.getTrustManagers(), new SecureRandom());

HttpsConfigurator configurator = new HttpsConfigurator(ssl);

HttpsServer httpsServer = HttpsServer.create(new InetSocketAddress(hostname, port), port);

httpsServer.setHttpsConfigurator(configurator);

HttpContext httpContext = httpsServer.createContext(uri);

httpsServer.start();

endpoint.publish(httpContext);

对于客户,请确保您执行以下操作:

System.setProperty("javax.net.ssl.trustStore", "path");

System.setProperty("javax.net.ssl.keyStore", "password");

System.setProperty("javax.net.ssl.keyStorePassword", "password");

System.setProperty("javax.net.ssl.keyStoreType", "JKS");

//done to prevent CN verification in client keystore

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {

@Override

public boolean verify(String hostname, SSLSession session) {

return true;

}

});

以上是 在HTTPS中使用javax.xml.ws.Endpoint 的全部内容, 来源链接: utcz.com/qa/413084.html

回到顶部