如何在Java中加载SSL证书

如何在Java中加载SSL证书,java,ssl,Java,Ssl,我正在创建一个Java程序以从服务器获取信息,但我必须从Java程序与服务器执行ssl握手 我有用于身份验证的myfilercert.cer文件证书,但我不知道如何用java加载该证书,以便java程序可以与我想从中获取信息的服务器进行“握手”。从哪里开始?您需要的是java。密钥库是SSL加密中使用的安全证书的存储库。 您可以在SSL握手期间阅读有关服务器身份验证的信息 作为keytool的替代方案,我建议使用一种具有图形用户界面的工具,名为。您可以使用它浏览.cer文件的内容并查看其中的内容

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

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

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

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

了解这些信息可能会很有用。另外,请阅读有关

关于java keytool essentials(与java密钥库一起使用的oracle工具)

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

一些问题在这一过程中帮助了我:

  • -了解信任管理器和密钥管理器之间的区别很重要
祝你好运

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

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

了解这些信息可能会很有用。另外,请阅读有关

关于java keytool essentials(与java密钥库一起使用的oracle工具)

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

一些问题在这一过程中帮助了我:

  • -了解信任管理器和密钥管理器之间的区别很重要

祝你好运

您可以使用ApacheHttpClient(或者只使用它所需的类来使用
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.getInstance("BKS",
                                                         BouncyCastleProvider.PROVIDER_NAME);
                byteArrayInputStream = new ByteArrayInputStream(keyStoreBytes);
                keyStore.load(byteArrayInputStream, keyStorePassword);
                Certificate[] certificates = keyStore.getCertificateChain("theCertAlias");
                Certificate certificate = certificates[0];

您可以使用ApacheHttpClient(或者只使用它中所需的类来使用
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.getInstance("BKS",
                                                         BouncyCastleProvider.PROVIDER_NAME);
                byteArrayInputStream = new ByteArrayInputStream(keyStoreBytes);
                keyStore.load(byteArrayInputStream, keyStorePassword);
                Certificate[] certificates = keyStore.getCertificateChain("theCertAlias");
                Certificate certificate = certificates[0];

听到这个消息很高兴!:)如果您已经编写了与keytool一起使用的创建所需密钥库的命令,那么如果您愿意,可以将其编辑到本文中以供将来参考。您能帮我解决这个问题吗?很高兴听到这个消息!:)如果您已经编写了使用keytool创建所需密钥库的命令,那么如果您愿意,可以将其编辑到本文中以供将来参考。您能帮我解决这个问题吗?