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

Java:重写禁用SSL证书检查的函数

朱睿
2023-03-14

web服务是SSL上的rest并且它有自己签名的证书,托管在远程系统中,我已经创建了一个访问该web服务的客户机。这是通过以编程方式将证书添加到密钥存储区来完成的。

现在我听说,访问自签名web服务不需要将证书添加到密钥存储区。相反,我们可以通过重写一些方法来禁用证书检查。这是真的吗?那些方法是什么?请帮忙。

共有1个答案

高琛
2023-03-14

这应该足够了。我在针对没有正确签名的证书的测试和暂存服务器测试代码时使用此方法。但是,您应该非常非常强烈地考虑在生产服务器上获得有效的SSL证书。没有人想被窃听,隐私被侵犯。

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[] { new TrustAllX509TrustManager() }, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){
    public boolean verify(String string,SSLSession ssls) {
        return true;
    }
});

还有这个。

import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;

/**
 * DO NOT USE IN PRODUCTION!!!!
 * 
 * This class will simply trust everything that comes along.
 * 
 * @author frank
 *
 */
public class TrustAllX509TrustManager implements X509TrustManager {
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }

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

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

}

祝你好运!

===更新===

我只想指出,有一个名为Let's Encrypt的服务,它可以自动生成和设置几乎所有人都认可的SSL/TLS证书,而且它是绝对免费的!

 类似资料:
  • 问题内容: 该Web服务基于SSL且具有自签名证书,该证书托管在远程系统中。我已经创建了一个访问该Web服务的客户端。这是通过以编程方式将证书添加到密钥存储区来完成的 。 现在,我听说,不必为添加自签名Web服务而将证书添加到密钥存储中。 相反,我们可以通过覆盖某些方法来禁用证书检查。 这是真的?这些方法有哪些? 请帮忙。 问题答案: 这应该足够了。在针对没有适当签名的证书的测试和登台服务器测试代

  • 我正在尝试编写一个集成测试,其中我们的测试使用Simple启动一个嵌入式HTTPS服务器。我使用创建了一个自签名证书,并且能够使用浏览器(特别是Chrome)访问服务器,并且我确实收到了关于自签名证书的警告。 但是,当我尝试使用Spring RestTemplate进行连接时,我得到了一个ResourceAccessException: 在单元测试之外的本地安装证书不是一个选项,因为这样就需要在每

  • 我目前正在使用SSL编写一个网络TCP服务器。在生产中,我们最终将要求客户机使用证书进行身份验证。 为了在紧急情况下撤销证书,我们还希望建立CRL。 编辑:删除过时的Dropbox链接

  • 问题内容: 我目前正在使用SSL编写网络TCP服务器。在生产中,我们最终将要求客户使用证书进行身份验证。 为了在紧急情况下吊销证书,我们还想建立一个CRL。 我的问题是:Java是否开箱即用地检查CRL(如果提供了证书),还是需要手动实施此类检查? 为了进行测试,我准备了带有CRL设置的证书,但是Java似乎没有尝试对其进行验证(我将其放入本地Web服务器中并且无法访问)。 我仅找到 _com.s

  • 问题内容: 我正在尝试编写一个集成测试,其中我们的测试使用Simple启动一个嵌入式HTTPS服务器。我使用创建了自签名证书,keytool并能够使用浏览器(特别是Chrome浏览器)访问服务器,并且收到有关自签名证书的警告。 但是,当我尝试使用Spring RestTemplate进行连接时,出现ResourceAccessException: 从其他问题和博客 文章中,我已经看到了Hostna

  • 问题内容: 假设我编写了两个Java应用程序:并且它们被部署并在两个单独的服务器上运行(部署到和部署到),并且这两个应用程序需要通过SSL相互通信(双向)。我们还假设每个应用程序都有自己的SSL证书。 我(Java程序员)如何编码并验证彼此的SSL证书?每个CA是否都提供某种我可以使用的RESTful API ?Java是否有自己的证书验证API?我可以使用开放源代码的第三方JAR或服务吗? 当我