当前位置: 首页 > 知识库问答 >
问题:

调用Web服务时信任过期的自签名证书

金令
2023-03-14

有一个受证书保护的Web服务。在调用它的客户端代码中,证书的CA必须存在于信任库(JRE_path\lib\security\cacerts)中——如果没有,则客户端会出现PKIX异常。

如果证书过期了会发生什么?客户端代码失败。

但是,可以通过直接将证书添加到信任库中来绕过这一点——信任过期的证书

i、 e.如果信任库中存在证书本身,而不是CA,那么即使证书已过期,一切都可以工作。

在我的场景中,webservice证书是一个自签名的证书,所以我不得不将它添加到信任存储中,即使证书过期,客户端也能继续正常工作。

现在我的问题是,这在所有情况下都有效吗?我的程序只是一个运行本地JRE的命令行程序。

如果有一个调用webservice的应用程序,并且该应用程序正在Websphere、JBoss、WebLogic、Tomcat、Glassfish等平台上运行,并且自签名证书被添加到该环境的truststore中,我是否仍然可以假设它将继续工作(不给出过期的错误)?

我认为它会起作用——因为这些应用服务器也会像任何程序一样使用JRE——或者我遗漏了什么?

共有2个答案

董谦
2023-03-14

回答您的问题:“如果我将自签名证书添加到信任存储中,该证书在过期后仍然受信任吗?还是会引发异常?”

它仍将受到信任(至少在java的cacerts信任存储中)。看见https://softwareengineering.stackexchange.com/a/308538

申屠宏胜
2023-03-14

您可以通过下面的代码
绕过所有证书

try {
            TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return null;
                }

                public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }

                public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
                }
            } };
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());

            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
            SSLContext.setDefault(sc);
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
            LOGGER.debug("All Certificates Have Been Trusted Successfully.");
        } catch (KeyManagementException ex) {
            LOGGER.error("Error:",ex);
        } catch (NoSuchAlgorithmException ex) {
            LOGGER.error("Error:",ex);
        } 
 类似资料:
  • 我正试图将我的计算机配置为信任用于测试网站的自签名证书。然而,我在Firefox上遇到了一些问题。Chrome和IE都没问题。 我做了以下几点。 使用OpenSSL创建2048位pem rsa密钥和crt 从密钥和crt文件创建pfx文件 使用MMC将pfx导入到服务器上的个人证书存储中 将IIS配置为使用站点的证书 在客户端PC上 null 我还尝试将证书直接添加到Firefox的权限列表中。它

  • 问题内容: 我试图使用(java)密钥工具创建一个自签名证书,但是当我尝试使用它时,出现以下异常(有关完整异常,请参见底部)。 我知道我可以使用以下代码绕过此代码: (资源) 但是我对此解决方案不感兴趣,因为我认为这会造成安全漏洞。(如果我错了,请纠正我)。 谁能指出我正确的方向?我目前正在本地进行测试,因此很容易进行更改。我可以访问服务器代码,客户端代码和.keystore文件。 更新资料 我试

  • 我想通过SSL连接到我的服务器。因此,我使用以下命令在服务器上生成证书: 如果我使用如下所示的TrustManager信任客户端上的所有证书,则连接可以正常工作: 但我当然不想相信所有的证书,而只相信我的证书。我尝试了以下几个命令来导入证书: 我要怎么做才能让它正常工作?有人能解释一下对一个不是很熟悉cryto领域的人所必需的步骤吗? 编辑:正如Donal Fellows所建议的那样,我尝试了自定

  • 我尝试使用自签名证书在HTTPS连接上向SonarQube实例启动maven sonar:sonar。Maven给我这个错误: [错误]无法执行目标org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:项目data.model上的sonar(default-cli):无法执行SonarQube:无法从服务器获取引导索引:sun.sec

  • 我已经为我的服务器生成了自我签名的证书。然后用设置->安全->安装添加到Android中。 据我所知,在我将证书添加到受信任的列表中之后,它应该可以很好地工作。我是不是漏掉了什么?其思路是通过Android系统添加证书,无需修改应用程序代码。 顺便说一句,我使用进行网络连接。也许我应该启用连接?

  • 问题内容: 我对phonegap比较陌生,最近我在Windows apache服务器上使用自签名证书设置了HTTPS / SSL,并尝试发出HTTPS ajax发布请求。在浏览器中运行时,该请求工作正常,但在phonegap中运行时失败。我尝试将android:debuggable设置为false,但这不能解决问题。我也做了一些研究,似乎phonegap确实支持HTTPS ajax请求,所以我对请