JAVA:如何使用公共证书和私钥进行SSL连接

JAVA:如何使用公共证书和私钥进行SSL连接,java,ssl,Java,Ssl,我希望在我今天面临的一个问题上能得到一些帮助: 我正在尝试向我们其中一个客户端的服务器验证我的客户端,我可以通过发出以下命令来完成此操作: curl-v-k-H“内容类型:application/json”--key privkey.pem--cert pub.cer--data@search.jsonhttps://.... 从上面的命令可以看出,我有以下几点: 公共证书 私钥 密钥库 现在,我正试图用java做同样的事情,但我不知道如何去做。我读过的所有指南都告诉我应该使用我拥有的密钥库。但

我希望在我今天面临的一个问题上能得到一些帮助:

我正在尝试向我们其中一个客户端的服务器验证我的客户端,我可以通过发出以下命令来完成此操作:

curl-v-k-H“内容类型:application/json”--key privkey.pem--cert pub.cer--data@search.jsonhttps://....

从上面的命令可以看出,我有以下几点:

  • 公共证书
  • 私钥
  • 密钥库

    现在,我正试图用java做同样的事情,但我不知道如何去做。我读过的所有指南都告诉我应该使用我拥有的密钥库。但我在跟随那些向导时遇到了障碍

    如果有人能帮我或给我指明方向,我将不胜感激

    提前感谢,, 彼得


  • 听起来您需要使用HTTPS URL连接来连接需要客户端身份验证的服务器。你需要做两件事才能从你现在的位置到达那里

    首先,需要从私钥和公共证书创建Java风格的密钥库。有关详细说明,请参见此问题的答案:

    您还需要将服务器的证书导入密钥库

    其次,您需要编写Java代码来使用新创建的密钥库。为此,请使用密钥库创建SSLContext,并将HTTPS URL连接设置为使用此上下文中的套接字工厂—大致如下:

    SSLContext sslContext 
        = SSLConnections.getSSLContext(keyStoreFile, keyStoreFilePassword);
    httpsURLConnection.setSSLSocketFactory(sslContext.getSocketFactory());
    

    这应该在创建HttpsURLConnection之后,但在连接之前完成,也就是说,在读取或写入HttpsURLConnection之前,或者在对其调用connect()之前。

    定义“路障”。您需要的唯一指南是JSSE参考指南。@EJP,我不能使用SSL套接字,我只允许使用HTTPS URL连接,这有点让事情变得困难。感谢您的参考,但我看不到太多帮助(我简单地浏览了一下),这里描述的所有密钥库和信任库步骤和设置都适用于SSLSockets和HttpsURLConnection。Warren,非常感谢您的回复。我按照你的指示做了。我创建了一个java密钥库,并在代码中应用了上下文。目前我收到:收到致命警报:握手失败。可能是因为我没有将服务器证书与密钥库一起导入吗?在出现错误之前,我跟踪的最后一件事是:main,RECV TLSv1 ALERT:fatal,handshake_failure,再次感谢是的,您还需要将服务器证书导入密钥库。编辑了我的答案。如果您仍然有问题,完整的堆栈跟踪将是很好的。感谢您的快速响应warren,我已请求客户向我发送他们的公共证书。我将导入它,一旦我得到它和回应。谢谢感谢您迄今为止的帮助,warren,我已将服务器证书导入到刚刚创建的密钥库中,但仍收到以下错误:main,RECV TLSv1警报:致命,握手失败