使用HttpClient与SSL和证书

时间:2010-05-05 15:45:04

标签: java ssl apache-commons-httpclient pkcs#12

虽然我熟悉HTTPS和SSL的概念,但我最近开始了一些开发,发现我有点困惑。

要求是我编写了一个在连接到扫描程序的计算机上运行的小型Java应用程序。扫描文档时,会将其拾取并将文件(通常为PDF)通过Internet发送到我们的应用程序服务器,然后处理它。我使用Apache Commons库和HTTPClient编写了应用程序。

第二个要求是通过SSL连接,需要证书。按照HTTPclient页面上的指导,我使用了贡献页面中的AuthSSLProtocolSocketFactory。

构造函数可以使用密钥库,密钥库密码,信任库和信任库密码。作为初步测试,我们的DBA在我们的一个开发Web服务器上启用了SSL,并为我提供了一个.p12文件,当我导入IE时,我可以成功连接。

我在密钥库和信任库之间有点困惑,我需要使用keytool采取什么步骤。我尝试将p12导入密钥库文件,但得到错误:

keytool error: java.lang.Exception: Input not an X.509 certificate

我遵循了将p12导入Internet Explorer并导出为.cer的建议,然后我可以成功导入到密钥库中。当我将此作为AuthSSLProtocolSocketFactory的keystore参数提供时,我得到了一个毫无意义的错误,但是如果我将它作为一个信任库试用它似乎它读得很好但最终我得到了

Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate

我不确定我是否错过了一些步骤,我完全误解了SSL和相互认证,或者这是服务器端的错误配置。

任何人都可以提供建议或指出我可以帮助我解决这些问题的资源吗?

2 个答案:

答案 0 :(得分:3)

密钥库包含您的私钥和相关证书。信任库包含您信任的证书,因此可用于证书路径构建和验证。

以下是一些可能有用的链接:

java.lang.Exception: Input not an X.509 certificate

Import private key and certificate into Java Key Store

Configuring Keystores and Truststores

答案 1 :(得分:1)

确保您的证书文件之前和之后没有任何内容。

----- BEGIN CERTIFICATE -----

----- END CERTIFICATE -----