Mat*_*son 5 java tomcat keystore truststore apache-httpclient-4.x
我正在编写一个访问远程服务器的例程.我连接的这个服务器需要相互身份验证,所以我必须提供一个密钥库,当我在它时,我也想建立一个适当的信任库.
我可以找到很多关于如何创建密钥库的教程,以及keytool让Apache HTTP客户端识别它的多种方法,但不是在Tomcat环境中将它存储在何处以便应用程序可以找到它.不知何故把它放在应用程序的war文件中对我来说似乎是一个坏主意.
同样,这不是允许Tomcat处理入站https连接 - 我有一个由我们的管理团队为此设置的反向代理.我正在创建需要相互身份验证的传出https连接,即接受自签名目标服务器证书,并提供我的服务器的自签名客户端证书.
您在哪里将实际的密钥库和信任库文件存储在Tomcat环境中以供Web应用程序使用?
您可以将密钥库放在任何您想要的位置,只要您知道如何知道httpclient在哪里加载密钥库即可。
当然,这就是窍门。
埋藏在接受的答案中所有混乱的代码中的是使用httpclient您自己的自定义密钥库的关键(哈!)。不幸的是,httpclient没有一个简单的 API,比如“这是我的密钥库文件的路径,现在使用它”或“这是我的密钥库的字节,使用它们”(如果您想从类加载器或其他方式加载密钥库) ),但情况似乎确实如此。
诚实的事实是,在 Java 中使用密钥库和信任库是一件很麻烦的事情,而且通常没有办法解决它。我自己只使用 HttpsURLConnection编写了一个支持客户端证书的 HTTP 客户端,然后还添加了原始套接字组件,我知道这是多么痛苦。
上面链接的文章中的代码虽然有点冗长,但相当简单。不幸的是,您将需要使生产质量代码变得更加混乱,因为您必须对流程的每个步骤进行错误检查等,以确保您的服务不会在以下情况下失败:您正在尝试建立各种商店并建立联系。