JAVA 使用两个 keystore 相同的应用程序

标签 java ssl keystore jks

我正在尝试用 Java 开发一个应用程序,它基本上从 REST-JSONs API 获取大量数据并将其插入到数据库中。我的问题是我使用的两个 URL 抛出了有关 SSL 证书的错误。为了解决这个问题,我创建了一个 jks 文件并插入了他们的证书。问题是,一旦我把它放在我的代码中,jvm 只使用该文件上的证书,所有其他的都被拒绝。所以我想让我的应用程序接受来自“cacerts.jks”和“custom.jks”的 json。请不要告诉我将证书添加到“teste.jks”(来自 jvm),因为该应用程序不会在我的计算机上运行,​​我需要一个单独文件中的证书。

再观察一下,我正在处理大约 90 个不同的 URL,我使用以下行来指示 jvm,即要使用的 keystore :

System.setProperty("javax.net.ssl.trustStore",System.getProperty("user.dir")+"/libs/teste.jks");
    //or (for native one):
System.setProperty("javax.net.ssl.trustStore", "cacerts.jks");

最佳答案

实现 javax.net.ssl.TrustManager 的子类或其子类之一,如 javax.net.ssl.X509TrustManager(下例中的 MyTrustManager)并调整 SSLContext 以使用它。您的信任管理器实现可以在验证/信任证书方面做任何您想做的事情。

        SSLContext context = SSLContext.getInstance("TLS");
        MyTrustManager tm = new MyTrustManager();
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "SUN");
        context.init(null, new TrustManager[] { tm }, sr);
        SSLContext.setDefault(context);
        HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());

关于JAVA 使用两个 keystore 相同的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29724950/

相关文章:

java - 如何在循环中更改 JLabel 的文本而不切换得太快以至于用户看不到它?

java - 显示 HTML 格式的大型 JLIST

python - 获取 SSL : CERTIFICATE_VERIFY_FAILED when using python with Apache NIFI rest api

apache - 从 mod_mono 中的 SSL session 检索客户端证书(在 Apache 2.2.2 (Red Hat) 中)

android - 在android中停用当前apk后,我们可以上传具有不同签名 keystore 的apk吗

Java 8 Stream中间操作-元素处理

java - Maven Build Plugin 不包含我自己的类

python - 限制 SSL 连接的带宽

java - keytool错误: java. security.KeyStoreException:找不到BKS

java - 如何将两个 ".jceks"文件合并为一个?