当我所拥有的只是 PEM 格式的提供的证书和故障的默认信任库时,如何使用 Java 发出安全的 HTTP 请求?

问题描述

我正在编写一个 Web 服务,它接受一个请求,针对外部 Web 服务验证请求的不记名令牌,使用存储过程从加密数据库中检索请求的信息,使用提供的密钥解密数据,并返回数据为 JSON。相当标准的东西,尽管我在请求身份验证方面遇到了绝对令人抓狂的问题。

针对外部身份验证服务的身份验证在我的开发机器上运行良好,但当我将其部署到生产环境时,所有请求都被拒绝,并显示无效证书错误。我通过使用 curl 手动发出请求来确认这一点,这显示了同样的问题。生产环境的所有者随后提供了 PEM 格式的证书(实际上是同一个文件中的两个证书)。使用 curl 发出的请求和此证书工作正常,因此我像往常一样使用 keytool 将此证书添加认信任库。这并没有解决错误,我在发出证书错误的请求时一直崩溃。

当涉及到 Java 证书时,我已经尝试了所有我知道的方法,我创建了一个自定义信任存储并将 JVM 指向它,我什至从我的开发机器上移植了已知良好的信任存储进入与导出的 JAR 相同的目录,并以编程方式设置 trustStore 属性以指向它,但绝对没有成功。为了允许进行一些测试,我做了旧的“安装一个只允许一切通过的信任管理器”来解决这个问题,但显然只有一个完整的疯子才会将该代码投入生产所以我不能把它按原样投入生产。

我完全被这里难住了。我开始认为存在一些奇怪的环境问题,如果相关的话,我在 macOS 上开发时生产服务器正在运行 Centos。请求和响应的框架是 Spring Boot。我正在以通常的方式使用 javax.net.ssl.HttpsURLConnection 提出请求。对此问题的任何建议将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)