java - 临时将自签名证书添加到本地信任库

标签 java ssl x509certificate keystore

我运行一个使用 https 连接的 java 应用程序。服务器上有一个自签名证书。在我的本地计算机上,我有一份该证书的副本,位于路径 C:\Whatever\mycertificate.cer 上。我想做到这一点,以便我的本地计算机接受自签名证书作为 https 连接的信任(除了正常的签名证书)仅适用于我的应用程序并且仅在应用程序运行时。

我的程序的输入参数是证书的路径。我使用以下代码将其转换为 java 对象 X509Certificate:

CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        InputStream inputStream = new FileInputStream(pathToTheCertificateFile);
        X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(inputStream);
        inputStream.close();

接下来,我创建一个新的空 Keystore(信任库)并将证书对象添加到其中:

KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null);
        trustStore.setCertificateEntry("extra", certificate);

最后,我使用 TrustManagerFactory 创建了一个 TrustManager:

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(trustStore);

最后,我使用这些信任管理器数组来初始化 SSLContext

SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, tmf.getTrustManagers(), null);
    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

这有3个问题:

  1. 它不起作用 - 那么我做错了哪一步?
  2. 此设置将只允许给定的证书,而不是给定的联合 证书+普通证书。我怎样才能添加额外的 证书?
  3. 我不确定这是否仅适用于临时(直到应用程序停止)和本地(仅适用于我的应用程序)- 确实如此 有人知道是不是这种情况吗?如果有的话,我可以改成什么 实现这个目标?

最佳答案

这里对这个问题进行了不错的讨论:https://security.stackexchange.com/questions/40207/why-ie-windows-forces-you-to-install-self-signed-certificates-as-root-ca-to-make .简而言之,这是故意很难做到的。您是否有理由不能只向浏览器添加异常(exception)?

关于java - 临时将自签名证书添加到本地信任库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783553/

相关文章:

java - 如何在 Eclipse 中为多个项目创建 TestNG 运行配置

postgresql - 将 SSL 证书添加到 docker 容器中的 postgres 数据库

apache - haproxy ssl 一直失败

android - 如何以编程方式在 Android 中安装 CA 证书(用于 EAP WiFi 配置)?

web-services - JBoss RESTEasy Web 服务可以使用 x509 证书来保证安全吗?

Java calendar.month 返回星期日所在的月份

java - 为什么我们已经有了 Vector 还需要同步的 ArrayList?

java - Eclipse 不更新 .java 文件

php - 散列或使用 SSL 将用户名和密码发送到外部站点

azure - 关于 X.509 证书和 MXChip IoT DevKit 的问题