首页 > 解决方案 > 在本地创建 spring 和 nodejs 应用程序之间的 SSL 连接

问题描述

我有两个应用程序,一个是用 nodejs(在本例中是简单的模拟服务器)和 spring app(核心应用程序)编写的。我想在这两者之间创建一个 SSL 连接。首先,我生成了一对密钥和证书,然后简单地设置了一个 nodejs 来通过 SSL 工作(我使用了这个例子:设置 SSL - nodeJs)。我已经检查过,当我在浏览器https://localhost:3000中写入时,它给了我一个“安全”的连接(带有打开的挂锁 - 所以没关系)。

接下来,我正在使用设置 SSL-Spring对 spring 应用程序进行配置。我从上一步生成中获取了一个证书,并将其在密钥库中设置为 .p12 文件。在春季应用程序中,我将节点应用程序的 url 更改为 https。

当我尝试从 spring 应用程序连接并从节点获取一些模拟数据时,我得到了这个堆栈跟踪:

Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我在堆栈中找到了一些东西,但是当我在特定目录中设置这个证书然后重新启动我的应用程序时,结果是一样的。

有没有人知道这个配置可能有什么问题以及如何解决它的一些建议?

标签: javanode.jsspringspring-bootssl

解决方案


我找到了这个问题的解决方案。我不知道为什么,但是当我在里面创建了一个带有证书的密钥库然后在我的 spring 应用程序中使用它时,它无法在全局范围内找到这个带有证书的密钥库。我正在寻找有关 openJDK11 的文档(因为我使用了它)并找到了一个指向启用无限强度管辖政策的链接,并检查了我拥有 openJDK11 版本的文件。

在我的情况下,该行crypto.policy被评论了,不知道为什么。当我取消注释并设置它时,unlimited它又给了我一个错误,但后来我找到了另一种解决方案。我发现,我需要将我的自签名证书添加到 cacerts 文件中(如何将我的自签名证书添加到 cacerts)。在这两个操作之后,它就像魅力一样。


推荐阅读