document.write("");

java 指定信任库

前提:Windows系统信任根证书颁发机构 导出证书 生成信任库 导入到Java应用 中

应用没有根证书颁发机构的证书,无法信任内部颁发的所有证书,

直接访问带域名接口,报错

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Java 使用 Windows 系统证书信任库

-Djavax.net.ssl.trustStoreType=Windows-ROOT

接口即可正常访问(放在java命令最前面)

 

可以在windows导出cer证书文件(

win11:

1. win + r  输入mmc,左上角,文件-> 添加/删除管理单元,在可用的管理单元中,选择证书【需要往下找一下,在底部】,点击添加,点击确定即可看到证书菜单。

2. 在证书菜单中,点击证书 - 当前用户,点击受信任的根证书颁发机构,点击证书,选择要导出的证书,右键,选择所有任务->导出。

3. 在证书导出向导中,单击下一步,选择要使用的格式为Base64编码 X.509(.CER)(S),单击下一步,输入待生成的目标证书文件的名称为test_windows_cer,单击下一步,点击完成。

将证书添加到信任库(shift + 右键,选择在此处打开Powershell窗口(S))

keytool -importcert -file test_windows_cer.cer -keystore windows_copy.jks -alias ca-cert
  • 输入秘钥库口令(随便输入,例如123456)
  • 再次输入新口令(与上面保持一致)
  • 是否信任此证书(输入y回车)

生成windows_copy.jks信任库文件。

Linux时,java应用指定信任库及秘钥即可

 -Djavax.net.ssl.trustStore=windows_copy.jks -Djavax.net.ssl.trustStorePassword=123456

例如:

java -Djavax.net.ssl.trustStore=windows_copy.jks -Djavax.net.ssl.trustStorePassword=123456 test.TestUtils
 
如果只有一个pfx证书,生成它的信任库,需要pfx证书文件本身,此证书对应的密码
根据pfx、密码和秘钥库类型,获取srcalias类型
keytool -list -v -keystore "D:\test\***.pfx" -storepass "***" -storetype PKCS12

在输出结果中,找到秘钥库包含的条目的别名的属性值,作为srcalias填入如下命令中

自定义导出的信任库的路径,以及自定义此信任库的密码,自定义新的别名

keytool -importkeystore -srckeystore "D:\test\***.pfx" -srcstorepass "***" -srcstoretype PKCS12  -srcalias "*****************************************************"  -destkeystore "D:\custom-truststore.jks" -deststorepass "123456" -destalias "***-***-***"

 

 Linux环境下,使用curl测试时,可以直接使用从windows导出的根证书文件(cer文件),使用--cacert 信任此根证书域名,
 curl --cacert ***.cer  https://域名/***/***

  

 
参数含义说明
-importkeystore 导入密钥库命令 用于将一个密钥库中的条目导入到另一个密钥库
-srckeystore 源密钥库路径 指定要从中导出条目的源密钥库文件路径
-srcstorepass 源密钥库密码 指定源密钥库的访问密码
-srcstoretype 源密钥库类型 指定源密钥库的格式类型(如PKCS12、JKS等)
-srcalias 源条目别名 指定源密钥库中要导出的条目的别名
-destkeystore 目标密钥库路径 指定要导入条目的目标密钥库文件路径
-deststorepass 目标密钥库密码 指定目标密钥库的访问密码
-destalias 目标条目别名 指定在目标密钥库中条目的新别名

测试类

package test;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class TestUtils {

    public TestUtils() {
    }

    public static void main(String[] args) {
        String url = "https://域名/xx/xxx";
        try {
            String res = get(url);
            System.out.println(" res : " + res);
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    /**
     * 向指定URL发送GET方法的请求
     *
     * @param url 请求URL
     * @return 返回结果
     */
    public static String get(String url) {
        BufferedReader in = null;
        try {
            URL realUrl = new URL(url);

            URLConnection connection = realUrl.openConnection();

            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded;");

            // 建立实际的连接
            connection.connect();

            // 读取URL的响应
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
            StringBuilder result = new StringBuilder();
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            return result.toString();
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            closeQuietly(in);
        }
        return "";
    }

    /**
     * 关闭BufferedReader,忽略关闭时的异常
     *
     * @param reader BufferedReader对象
     */
    private static void closeQuietly(BufferedReader reader) {
        if (reader != null) {
            try {
                reader.close();
            } catch (Exception ignored) {
            }
        }
    }

}

  

posted @ 2025-08-19 16:05  人间春风意  阅读(37)  评论(0)    收藏  举报