当前位置: 首页 > 面试题库 >

我与之交谈的Web服务器更新了其SSL证书,现在我的应用无法与之对话

公冶森
2023-03-14
问题内容

网络服务器将其SSL证书更新为新的经过verisign签名的证书,并且我的Java应用程序无法再连接。

我正在使用Java 5并在/ usr / java / jre / lib / security中的证书文件上带有日期的2006年11月

我懂了

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1518)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:848)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:818)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1030)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1057)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1041)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:402)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:170)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)

如何安装服务器提供的新密钥?

从另一个Java实例中我得到

Certificate chain received from eservices3.bus.att.com - 135.38.253.93 was not trusted causing SSL handshake failure.

我认为这是出于相同的根本问题。

更新更新 远程服务器之前,这可以与我们的标准java安装一起使用。我不必安装任何证书即可使它在上一次运行。


问题答案:

Java尝试遵循服务器提供的证书链来验证证书,直到找到它信任的证书(即cacerts文件中存在的证书)为止。

我们可以使用OpenSSL命令行工具手动验证链:

simon @ lucifer:〜$ openssl s_client -connect eservices3.bus.att.com:443
<snipped>
---
证书链
 0秒:/ C = US / ST =乔治亚州/ L =阿尔法利塔/ O = ATT Services,Inc./OU=ATTIT/CN=eservices3.bus.att.com
   i:/ C = US / O = VeriSign,Inc./OU=VeriSign信任网络/ OU =使用条款,网址为https://www.verisign.com/rpa(c)10 / CN = VeriSign 3类安全服务器CA -G3
---

现在,这是问题所在:颁发者(行开头i:)“ VeriSign
3类安全服务器CA-G3”是中间证书,而不是根证书。AT&T服务器配置错误,应该同时发送自己的证书(“ eservices3.bus.att.com”)
中间证书,以便Java可以一直验证到根的链。

为了说明另一种方式,链条应如下所示:

1)VeriSign 3类公共一级证书颁发机构-G5(根)
                               ^
                               | 被...签名
                               |
2)VeriSign 3类安全服务器CA-G3(中级)
                               ^
                               | 被...签名
                               |
3)eservices3.bus.att.com(服务器)
  • 根(1)在cacerts-好的
  • SSL握手期间显示服务器证书(3)-好的
  • 但是:Java不了解中间件(2)-因此无法端对端验证链

要解决此问题,您可以:

  • 要求AT&T修复服务器,以便它在握手期间发送服务器 中间证书,或者
  • 将中间证书导入Java的密钥库

第一种解决方案是更可取的,因为它可以帮助所有人(不仅限于您),而且风险较小(您可能不会注意到中间证书是否受到威胁)。

如果要将证书作为临时措施导入,请从VeriSign的支持页面(即“中学SSL中间CA证书”)中获取证书,然后:

simon @ lucifer:〜$ keytool -importcert -alias some_alias_of_your_choosing \
                    -文件middle_cert_path.crt \
                    -keystore your_cacerts_path
输入密钥库密码:*****
证书已添加到密钥库

删除证书(一旦AT&T共同行动):

simon @ lucifer:〜$ keytool-删除-alias same_alias_as_before \
                    -keystore your_cacerts_path


 类似资料:
  • 我有一个网络服务在一个域上工作,比如www.abc.com。我想配置我的服务器,这样来自另一个域的请求(除了来自www.abc.com)都不会被接受。我不应该使用用户身份验证或任何与基于令牌的身份验证相关的东西。所以,我能想到的唯一选择是CORS,但我不知道如何使用它。任何帮助都很好。 我正在使用nodejs和express

  • 为了支持HTTP,我已经将以下代码添加到我的网络应用程序(Spring启动2.5.6v),该应用程序具有HTTPS的SSL证书。 我从上面的代码中可以理解的是,我从外部站点复制粘贴(没有太多解释),每当它收到8080 port(HTTP://localhost:8080)的请求时,它都会将请求重定向到8443 port(HTTPS://localhost:8443)。我不太确定是否也将此代码用于生

  • 本文向大家介绍angularJS之$http:与服务器交互示例,包括了angularJS之$http:与服务器交互示例的使用技巧和注意事项,需要的朋友参考一下 在angularJS中与远程HTTP服务器交互时会用一个非常关键的服务-$http。 $http是angular中的一个核心服务,利用浏览器的xmlhttprequest或者via JSONP对象与远程HTTP服务器进行交互。 $http的

  • 本文向大家介绍Python 搭建Web站点之Web服务器与Web框架,包括了Python 搭建Web站点之Web服务器与Web框架的使用技巧和注意事项,需要的朋友参考一下 之前用 Django 做过一个小的站点,感觉Django太过笨重,于是就准备换一个比较轻量级的 Web 框架来玩玩。Web.py 作者已经挂掉,项目好久没有更新,所以不准备用它。而 Flask 也是一个成熟的轻量级 Web 框架

  • 请告诉我web服务器、web容器和应用程序服务器之间的区别。

  • [2019-01-31T13:55:17.138-0500][Payara 4.1][INFO][][TID:_Threadid=37_ThreadName=HTTP-Thread-Pool::HTTP-Listener-2(5)][TimeMillis:1548960917138][LevelValue:800][[HTTP-Thread-Pool::HTTP-Listener-2(5),致命: