【问题标题】:How to load SSL Certificate in Java如何在 Java 中加载 SSL 证书
【发布时间】:2015-06-20 10:53:00
【问题描述】:

我正在创建一个 Java 程序以从服务器获取信息,但我必须从 Java 程序与服务器执行 ssl 握手。

我有 myfilercert.cer 用于身份验证的文件证书,但我不知道如何在 java 中加载该证书,以便 java 程序可以与我想从中获取信息的服务器执行“握手”。从哪里开始?

【问题讨论】:

    标签: java ssl


    【解决方案1】:

    您需要的是 java keystore。密钥库是 SSL 加密中使用的安全证书的存储库。 您可以阅读here 关于 SSL 握手期间的服务器身份验证。 This is a keystore tutorial.

    作为 keytool 的替代品,我建议使用一个名为 Portecle 的带有图形用户界面的工具。您可以使用它来浏览 .cer 文件的内容并查看其中的内容。

    了解various certificate encodings 会很有用。另请阅读X.509 standard

    This is an article 关于 java keytool essentials(这是与 java 密钥库一起使用的 oracle 工具)。

    您可以 google 并找到很多指导您如何生成的资源。我认为您会希望将证书保留在应用程序级别。

    在此过程中帮助我的一些 SO 问题:

    祝你好运!

    【讨论】:

      【解决方案2】:

      你可以使用 Apache HttpClient(或者只是使用它所需的类来使用SslContextBuilder,真的),然后它会是这样的:

              SSLContextBuilder sslContextBuilder = SSLContextBuilder.create();
              sslContextBuilder.loadTrustMaterial(new File("yourTrustStore.jks"), "thePassWord");
              SSLContext sslContext = sslContextBuilder.build();
              HttpsURLConnection httpsURLConnection = (HttpsURLConnection) (new URL("https://thesite.com").openConnection());
              httpsURLConnection.setSSLSocketFactory(sslContext.getSocketFactory());
      

      但是您需要为您的证书创建一个密钥库,这可以使用 keytool 完成。如果你需要这个 android,你需要 SpongyCastle 库,并使用它作为 KeyTool 的提供者来创建 BKS 密钥库而不是 JKS 密钥库;您需要在 Java 中显式打开 KeyStore。

                      KeyStore keyStore = KeyStore.getInstance("BKS",
                                                               BouncyCastleProvider.PROVIDER_NAME);
                      byteArrayInputStream = new ByteArrayInputStream(keyStoreBytes);
                      keyStore.load(byteArrayInputStream, keyStorePassword);
                      Certificate[] certificates = keyStore.getCertificateChain("theCertAlias");
                      Certificate certificate = certificates[0];
      

      【讨论】:

      • 很高兴听到这个消息! :) 如果您已经编写了与 keytool 一起使用的命令来创建所需的密钥库,那么如果您愿意,可以将其编辑到这篇文章中以供将来参考。
      • 你能帮我解决这个问题stackoverflow.com/questions/50715251/…吗?
      猜你喜欢
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 2012-03-28
      • 2016-08-02
      • 2020-01-13
      • 2021-07-29
      • 2019-09-02
      • 2014-03-19
      相关资源
      最近更新 更多