在本地创建 spring 和 nodejs 应用程序之间的 SSL 连接

Posted

技术标签:

【中文标题】在本地创建 spring 和 nodejs 应用程序之间的 SSL 连接【英文标题】:Create a SSL connection between spring and nodejs apps locally 【发布时间】:2019-11-10 12:08:12 【问题描述】:

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

接下来我使用setting 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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于在本地创建 spring 和 nodejs 应用程序之间的 SSL 连接的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS (Express + PUG) MVC 端口检查器

带有 Angular2 应用程序和 NodeJs 的 Docker 容器没有响应

使用 express js 和 vuejs 提供不同的本地 json 数据

nwjs-简介

当我将 Spring Boot 应用程序部署到 AWS Elastic Beanstalk 并且无法从本地 Spring Boot 连接到 RDS 时出现 502 错误网关

使用 NodeJs 后端从浏览器访问本地 json 文件