gpt4 book ai didi

authentication - 如何配置 Apache HttpClient 4.x 以使用特定的 Websphere SSL 别名?

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:30 27 4
gpt4 key购买 nike

当使用 Websphere 尝试通过 HttpClient 4.x(当前版本为 4.2.1)连接到外部系统时,我们的环境出现问题。连接到外部系统很好,他们的证书安装在 Websphere 中,无需额外配置 HttpClient。但是,当他们启用相互身份验证时,它不再有效,我们得到一个 SSLPeerUnverifiedException 异常:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated,
at com.ibm.jsse2.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:105),
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128),
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572),
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180),
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294),
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640),
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479),
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906),
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1066),

有人向我提供了以下代码示例,我想知道是否有任何方法可以将 HttpClient 配置为使用像此代码示例那样的显式别名。我试图找到有关将 SSL 相互身份验证与 HttpClient 4 结合使用的好文档,但找不到太多。

这是代码示例:

private HttpURLConnection getConnection(String server, String machine,
String port) throws Exception {
URL u = new URL(server);
HttpsURLConnection connection = (HttpsURLConnection) u.openConnection();
String alias = "CellDefaultSSLSettings";

final HashMap connectionInfo = new HashMap();
connectionInfo.put(JSSEHelper.CONNECTION_INFO_DIRECTION,
JSSEHelper.DIRECTION_OUTBOUND);
connectionInfo.put(JSSEHelper.CONNECTION_INFO_REMOTE_HOST, machine);
connectionInfo.put(JSSEHelper.CONNECTION_INFO_REMOTE_PORT, port);

javax.net.ssl.SSLSocketFactory sslFact = JSSEHelper.getInstance()
.getSSLSocketFactory(alias, connectionInfo, null);

connection.setSSLSocketFactory(sslFact);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
return connection;
}

基本上,如何让 HttpClient 使用“CellDefaultSSLSettings”?

最佳答案

从根本上说,这个问题与HttpClient 无关。 HttpClient 可以配置为使用任何自定义 SSLContextSSLSocketFactory 实例建立 HTTPS 连接。这基本上是关于如何使用 JSSE API 以正确的方式配置 SSLContext。在您的特定情况下,JSSEHelper 会为您完成所有艰苦的工作。

// JSSE socket factory
javax.net.ssl.SSLSocketFactory jssesf = JSSEHelper.getInstance().getSSLSocketFactory(alias, connectionInfo, null);
// HC socket factory
SSLSocketFactory hcsf = new SSLSocketFactory(jssesf, SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);

这将提供一个可以向连接管理器注册的连接套接字工厂。

HttpClient 4.3 还附带了 SSLContextBuilder 类,可用于使用流畅的构建器 API 组装自定义 SSL 配置。

https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ssl/SSLContextBuilder.java

关于authentication - 如何配置 Apache HttpClient 4.x 以使用特定的 Websphere SSL 别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17173350/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com