虽然我已经熟悉 HTTPS 和 SSL 的概念,但我最近开始一些开发,发现我有点困惑。
要求是我编写一个小型 Java 应用程序,该应用程序在连接到扫描仪的机器上运行。扫描文档时,会拾取该文档并将文件(通常为 PDF)通过互联网发送到我们的应用程序服务器,然后由应用程序服务器对其进行处理。我使用 Apache Commons 库和 HTTPClient 编写了该应用程序。
第二个要求是通过 SSL 连接,需要证书。按照 HTTPclient 页面上的指导,我使用贡献页面中的 AuthSSLProtocolSocketFactory。
构造函数可以采用密钥库、密钥库密码、信任库和信任库密码。作为初步测试,我们的 DBA 在我们的一个开发网络服务器上启用了 SSL,并为我提供了一个 .p12 文件,当我将其导入 IE 时,我可以成功连接。
我对密钥库和信任库以及使用密钥工具需要采取哪些步骤感到有点困惑。我尝试将 p12 导入密钥库文件,但收到错误:
keytool error: java.lang.Exception: Input not an X.509 certificate
我遵循了将 p12 导入 Internet Explorer 并导出为 .cer 的建议,然后我可以将其成功导入到密钥库中。当我将其作为 AuthSSLProtocolSocketFactory 的密钥库参数提供时,我得到一个无意义的错误,但是如果我尝试将它作为信任库,它看起来读取得很好,但最终我得到了
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
我不确定我是否错过了一些步骤,我完全误解了 SSL 和相互身份验证,或者这是服务器端的错误配置。
任何人都可以提供建议或向我指出可以帮助我解决这个问题的资源吗?