21xrx.com
2024-11-25 01:12:19 Monday
登录
文章检索 我的文章 写文章
《Java调用https跳过证书的实现方法》
2023-06-15 19:25:19 深夜i     --     --
Java Https 证书 SSLContext TrustManager HttpsURLConnection

在Java开发中,我们常常需要通过Https协议访问Web服务器来获取数据或者调用接口。但是当服务器证书不受认可,或者发生证书伪造、证书过期等情况时,访问会被中断。为了解决这个问题,我们可以使用一些方法跳过证书校验,实现正常的访问。

方法一:忽略证书错误

通过在代码中添加如下一行,可以让Java程序忽略证书错误:


TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {

  public java.security.cert.X509Certificate[] getAcceptedIssuers()

    return null;

  

  public void checkClientTrusted(X509Certificate[] certs, String authType)

  

  public void checkServerTrusted(X509Certificate[] certs, String authType)

  

} };

SSLContext sc = SSLContext.getInstance("SSL");

sc.init(null, trustAllCerts, new java.security.SecureRandom());

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {

  public boolean verify(String hostname, SSLSession session)

    return true;

  

});

方法二:导入证书

将CA证书导入到Java环境中,可以让程序信任该证书。具体步骤如下:

1. 获取CA证书

通过浏览器访问目标站点,手动导出证书。将证书保存在本地磁盘的某个目录下。

2. 将证书导入到Java环境

在命令行窗口中执行以下命令:


keytool -import -alias YOUR_ALIAS -file THE_CERTIFICATE.crt -keystore THE_KEYSTORE.jks

其中,YOUR_ALIAS是证书的别名,THE_CERTIFICATE.crt是证书的路径,THE_KEYSTORE.jks是证书存储的文件名。执行命令后,会提示输入密码,这个密码要牢记。

3. 修改Java环境的安全配置

编辑$JAVA_HOME/jre/lib/security/java.security文件,在最后一行添加:


javax.net.ssl.trustStore=PATH_TO_YOUR_KEYSTORE

javax.net.ssl.trustStorePassword=YOUR_KEYSTORE_PASSWORD

其中,PATH_TO_YOUR_KEYSTORE是证书存储的路径,YOUR_KEYSTORE_PASSWORD是证书密码。

方法三:设置HttpsURLConnection默认信任所有证书

通过在代码中添加如下一行,可以让程序信任所有证书:


HttpsURLConnection.setDefaultHostnameVerifier((hostname, sslSession) -> true);

以上三种方法均可以让Java程序调用Https接口时跳过证书校验,但是忽略证书错误和信任所有证书存在安全风险,因此在实际开发中应根据具体情况审核和选择。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复