如何让 Chrome/browser 接受我的 SSL 证书(由我自己的 CA 的中间证书签名)

How to get Chrome/browser to accept my SSL cert (signed by intermediate cert for my own CA)

我有开发背景,但正在努力提高我的 sec/ops 技能以变得更加多才多艺。

我已经按照 this guide 设置了自己的本地证书颁发机构(尽管相当松散)。

我成功地为 test.mydomain.com 创建了一个根对(密钥和证书)、一个中间对和一个服务器对。

然后我将 nginx 配置为 Node.js 网络 API 的服务代理(由 Express FWIW 提供服务)。 nginx 和 nodejs 服务都是容器化的,我只是在本地使用 docker-compose 到 运行。我还添加了一个主机条目,以便我可以使用 test.mydomain.com 访问我的服务。最终我想在 Kubernetes 中实现 service-proxy/sidecar 模式(其中 nginx 和(微)服务 运行 在同一个 pod 中),但现在我只是想让它在 docker.

一切都在 HTTP 上工作,所以下一步是让它在 HTTPS 上工作(其中 TLS 在 nginx 服务代理处终止,然后请求通过 HTTP 代理到 Node.js 服务) .它正在工作,但我无法让我的浏览器(Chrome 运行ning in Windows)接受我的证书。

我尝试了几种将证书导入 Windows 证书存储的组合,包括:

但我无法Chrome接受我的证书。

仅供参考,nginx配置如下

ssl_certificate /etc/ssl/test.mydomain.com.cert.pem;
ssl_certificate_key /etc/ssl/private/test.mydomain.com.key.pem;

我是否应该为 nginx 中的 ssl_certificate 设置链接服务器、中间和根证书?..我应该将什么证书(或链接证书)导入到哪个证书存储?

我还注意到有一个 ssl_trusted_certificate nginx 设置,我不确定我是否应该使用它...

干杯, 瑞安.

好的,我终于搞定了。有几件事...

我设法先在 Firefox 中运行,但 Chrome 仍然失败。这是我需要的线索 - 结果 Chrome 要求证书包含一个或多个主题备用名称,而不是仅包含一个通用名称(这显然是 Firefox 可以接受的)。

我在创建和签署证书请求时必须配置主题备用名称。

剩下的就很简单了。

在 nginx 中,ssl_certificate 指向链式证书(服务器证书 + 中间证书)。

然后我必须将根证书导入本地计算机的受信任根 CA。

重新启动 chrome 瞧: