如何在Java中加载SSL证书

时间:2015-06-20 10:53:01

标签: java ssl

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

java keytool essentials上的

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

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

一些SO问题帮助了我:

祝你好运!

答案 1 :(得分:1)

您可以使用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];