https 证书过期问题排查

一、问题描述

在服务协议由 http 迁移至 https 时,我发现线上环境报错

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed
Caused by: java.security.cert.CertificateExpiredException: NotAfter: Sat May 30 18:48:38 CST 2020

二、问题排查

根据报错 CertificateExpiredException: NotAfter: Sat May 30 18:48:38 CST 2020 是因为证书过期,我立即联系客户技术部确认他们的证书是否过期,经查证没有过期

但是在生产和测试环境都报证书过期错误,奇怪的是本地环境可以正常访问

于是我在 https://whatsmychaincert.com/ 验证其证书链是否有问题,果然经查证其证书链中有过期的证书:

所以原因定位在客户服务器的证书链中存在过期证书

三、什么是证书链

简单来说,当客户端访问 TLS 服务器时,服务端会发送一个证书给客户端来证明其身份,客户端需要构建一条由服务端证书到根证书的证书链,以便对其进行验证。服务端很贴心,帮客户端返回了一条证书链

如果服务端的证书链是这个样子:

在这里插入图片描述
那么对于现代浏览器或客户端来说,C 没有过期就可以了,直接忽略了 D

但对于 OpenSSL 1.0.x or GnuTLS 来说,它们会一直检测到 D,因为 D 已经失效了 2019(现在是 2021 年),所以会返回证书过期

四、解决方案

鉴于此,我赶紧去生产和测试机器查了一下 openssl 的版本,果然是 OpenSSL 1.0.x,和上述结论一致。本地环境用的是 LibreSSL 2.8.3,因此访问没有问题

4.1 直接禁用 ssl 证书校验


```java
// 在调用SSL之前需要重写验证方法,取消检测 SSL
            X509TrustManager trustManager = new X509TrustManager() {

                @Override
                public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                }

                @Override
                public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                }

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
            };
            SSLContext ctx = SSLContext.getInstance(SSLConnectionSocketFactory.TLS);
            ctx.init(null, new TrustManager[]{trustManager}, null);
            SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);
            Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
                    .register("http", PlainConnectionSocketFactory.INSTANCE)
                    .register("https", socketFactory).build();
            // 创建ConnectionManager,添加Connection配置信息
            connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
            connectionManager.setMaxTotal(MAX_CONNECTION_NUM);
            connectionManager.setDefaultMaxPerRoute(MAX_PER_ROUTE);

HttpClients.custom().setDefaultRequestConfig(requestConfig).setConnectionManager(connectionManager).build();

4.2 更新服务器 openssl 库版本

4.3 更新服务端证书

访问 https://whatsmychaincert.com/,直接点击链接下载新证书,安装即可

五、其他

证书类型验证网站:https://csr.chinassl.net/ssl-checker.html

证书过期问题:https://whatsmychaincert.com

https://www.agwa.name/blog/post/fixing_the_addtrust_root_expiration#2099-client_operators

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux排查网络问题时,可以按照以下步骤进行操作: 1. 检测链路是否连通:通过ping命令测试与其他主机的连通性。如果无法ping通其他主机,可能存在网络链路故障或网络配置问题。 2. 检查网卡是否正常启用:使用ifconfig命令检查网卡的状态。如果网卡没有正确配置开启,可以通过编辑网络配置文件进行修改。在基于Debian的Linux系统中,永久的网络配置文件位于/etc/network/interfaces;在基于Red Hat的Linux系统中,永久的网络配置文件位于/etc/sysconfig/network_scripts/ifcfg-<interface>。 3. 检查路由与网关的配置:通过route命令查看当前的路由表和网关设置。确保网关设置正确,并且路由表中存在正确的路由信息。 4. 检查DNS工作状况:使用nslookup或dig命令测试DNS解析是否正常。如果无法解析域名,可能是DNS服务器配置有问题。 5. 检测是否可以正常路由到远程主机:使用traceroute或mtr命令追踪网络路径,查看是否存在延迟或丢包现象。 6. 检查远端主机的服务端口是否打开:使用telnet或nc命令测试远程主机的特定端口是否可连接。如果无法连接,可能是目标主机的服务未启动或防火墙阻止了连接。 7. 检查防火墙:通过iptables或firewalld命令检查防火墙设置。确保防火墙规则没有阻止网络流量。 以上是在Linux排查网络问题时的常见步骤和方法。根据具体问题,可以针对性地进行排查和解决。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [各种网络问题排查思路](https://download.csdn.net/download/zkp358747721/10938224)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【当LINUX系统出现网络问题时该如何排查】](https://blog.csdn.net/nb_zsy/article/details/127430829)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值