gpt4 book ai didi

java - sslv2 和 sslv3 兼容性或证书问题?

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

我有一个在服务器“CCC”中运行的 unix 脚本,从中调用在另一台服务器“GGG”中运行的 servlet。(服务器 GGG 是一个安全的服务器,与普通服务器相比具有额外的防火墙)

另外,CCC 是一个 ETL 服务器,它有一个 JRE。该脚本使用 http 调用 servlet,因为应用了 I 规则,所以重定向发生在 https 上,并且端口号也在改变。

当我尝试调用 servlet 时,我遇到了错误的证书错误。

在普通 IE 或 chrome 中给出的 servlet URL 给了我一个有效的响应,我能够访问服务器 GGG。

我得到的错误是:

javax.net.ssl.SSLHandshakeException: bad certificate
at com.ibm.jsse.bg.a(Unknown Source)
at com.ibm.jsse.b.a(Unknown Source)
at com.ibm.jsse.b.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:139)
at org.apache.commons.httpclient.HttpConnection.flushRequestOutputStream(HttpConnection.java:827)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:1975)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:993)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
at com.tgt.task.client.TaskClient.doGet(TaskClient.java:153)
at com.tgt.task.client.TaskClient.runClient(TaskClient.java:91)
at com.tgt.task.client.TaskClient.completeTask(TaskClient.java:68)
at com.tgt.task.client.TaskClient.main(TaskClient.java:53)

所以,最初我检查了 CCC 服务器的 cacerts 中的证书,它拥有所有根证书,除了颁发给 URL 的证书。

我们发现问题是在 URL 的 BIG IP 证书续订之后开始的,我已经跟进我的网络团队来调查这个问题,他们已经确认从服务器 CCC 到 GGG 的流量通过了防火墙。

因此在我们尝试调用 URL 时捕获了流量,我们得到了以下信息:

client  server  SSLV2   282 Client Hello
server client SSLV3 1631 Server Hello
server client SSLv3 433 Certificate
client server SSLV3 190 Alert(Level: Fatal, Description: Bad Certificate)

你能告诉我这个问题是因为客户端和服务器使用的 SSL 版本吗?

或者我在分析中遗漏的其他一些东西。

我什至尝试将 URL 的证书导入服务器 CCC 中的 cacerts,但出现错误:

keytool 错误:java.lang.Exception:输入不是 X.509 证书

所以,我为 URl 获取了 PKCS7 证书,并尝试将其转换为 .cer 并尝试导入,但出现了同样的错误。

最佳答案

如果它适用于浏览器,但不适用于脚本,则它通常与服务器名称指示 (SNI) 有关。使用 SNI,您可以在同一 IP 地址后拥有多个具有不同证书的主机。虽然当前所有浏览器都支持 SNI,但其他实现可能不会或可能不会默认启用 SNI。如果客户端无法在同一 IP 后面有多个证书的站点上使用 SNI,它只会获得默认证书,而这通常是错误的。

我不知道你运行的是哪个 Java 版本,但我建议你确定你的版本,然后谷歌一下如何在你的版本中使用 SNI。据我了解,SNI 仅在 Java 版本 7 中启用。

关于java - sslv2 和 sslv3 兼容性或证书问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24052183/

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