gpt4 book ai didi

java - SSL 请求仅在生产环境中失败

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:47 25 4
gpt4 key购买 nike

我在运行 Java 7 (Oracle JVM) 的 Tomcat 7 上部署了一个 Java webapp。

我对外部 HTTPS url 的所有 Apache HTTPClient 请求都失败了(仅在生产中),我不太清楚为什么。我检查了随 JVM 安装的 cacerts 信任库,所有证书均有效。

我已经将 JVM 和 Tomcat 目录下载到我的开发机器上并运行了 webapp(使用相同的路径、相同的参数等)并且它可以工作。

在生产环境中执行发出 HTTPS 请求的独立 JAR 也可以。

在这一点上,坦率地说,我没有想法。

这是失败的示例代码:

  InputStream is=null;

HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 2000);
HttpConnectionParams.setSoTimeout(httpParams, 2000);

DefaultHttpClient httpclient = new DefaultHttpClient(httpParams);
try {
httpclient.getParams().setParameter("http.useragent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
HttpContext localContext = new BasicHttpContext();

HttpHead httphead = new HttpHead(url);
HttpResponse response = httpclient.execute(httphead, localContext);

HttpGet httpget = new HttpGet(url);
response = httpclient.execute(httpget, localContext);

HttpEntity entity = response.getEntity();
is= new ByteArrayInputStream(EntityUtils.toByteArray(entity));

} catch (IOException ie) {
throw new IOException("IO exception",ie);
} finally {
httpclient.getConnectionManager().shutdown();
}
return is;

堆栈跟踪示例:

Caused by: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:421)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)

Tomcat JAVA_OPTS:

JAVA_OPTS="-server -Xms4g -Xmx4g -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Djavax.net.ssl.trustStore=/usr/lib/jvm/java-7-oracle/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit"

最佳答案

如果无法访问您的环境,则很难判断。我要检查的第一件事:

  • 确保您确实在使用您认为正在使用的 JVM 和信任库
  • 检查您的用户主目录中的 .ssh 目录。
  • 您是否有本地运行的任何 ssl 工具,例如 plink?
  • 您是否设置了任何与 SSL 有关的环境变量?
  • 生产服务器上的防火墙设置是什么?

关于java - SSL 请求仅在生产环境中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41220175/

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