我正在编写客户端代码以连接到服务器(不受我控制)。在服务器上维护应用程序的人员向我提供了.crt和.key文件。我使用了这些,并创建了自己的密钥库。
当我将上述密钥库与CURL实用程序一起使用时,我能够与主机URL建立连接。但是,当我将密钥库加载到KeyManagerFactory中并在HttpsURLConnection中使用它时,会收到“握手失败”警报。
我检查了Internet,发现有关服务器和客户端之间不匹配的密码套件的某些信息可能导致此问题。但是我尝试了我拥有的每个套件,并且产生了相同的结果。我认为密钥库应该没有问题,因为使用CURL时它可以连接,并且如果我尝试不使用密钥库进行连接,即使CURL实用程序也会失败。因此,密钥库应该正确。
我注意到的一件事是,当我执行getLocalCertificates()时,我总是得到一个null。这是否意味着我的证书都没有发送到服务器?我的Java代码是否拒绝我在密钥库中拥有的证书?发生这种情况的原因可能是什么?无论如何,我可以确认这是怎么回事吗?
当我执行getServerCertificates()时,我得到了5个证书,但是getLocalCertificates()始终为空。
另一个奇怪的是,当我通过Postman向相同的URL发送请求时,服务器会做出响应!我什至没有使用任何密钥库或类似的密钥库,Postman是否有自己的授权密钥库/证书?
我很想知道getLocalCertificates()为null是我的Java代码无法运行的原因,但是直觉并不能帮助我。
可以帮助我识别或隔离问题的答案非常棒。好吧,在这一点上,我将接受任何指导并为此进行工作。