嗨,我的tomcat容器配置如下:
<Connector
port=...
connectionTimeout=...
maxThreads=...
scheme="https"
secure="true"
SSLEnabled="true"
keystoreFile="path to keystore"
keystorePass="pass"
truststoreFile="path to truststore"
truststorePass="pass to truststore"
keyAlias=...
clientAuth=...
sslProtocol="TLSv1.2"
protocol="HTTP/1.1" />
我在同一雄猫上同时部署了客户端和服务器战争。因此,我希望在ssl握手客户端时,它将从密钥库(在连接器上配置)接收服务器证书,并将在信任库(在连接器上配置)前面对其进行验证。
我的客户代码如下:
HttpURLConnection connection = null;
StringBuilder response = new StringBuilder();
try {
URL url = new URL(requestURL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json");
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
String requestMessage = "some request";
try (OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream())) {
out.write(requestMessage);
}
问题是我失败了SSLHandshake PKIX异常,这通常发生在由于某种原因(证书无效,信任库无效或没有适当的CA)而无法通过验证的情况下
在调试之后,我看到我有一些配置了信任库的默认ssl上下文(这不是我的信任库)。
我的问题: 1。。如何实现客户端以使其从tomcat连接器获得信任存储... 2。。我看到的是Java标准艺术品信托商店吗?从哪里得到的?
我实际上可以在HTTP S UrlConnection上设置自定义 SSLContext ,如下所示:
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
但是,我不想手动提供信任库,但我想使用tomcat连接器中的那个。