0

我来自 DEV 背景,但正在努力提高我的安全/操作技能以变得更加通用。

我已经按照本指南建立了自己的本地证书颁发机构(尽管相当松散)。

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

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

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

在此处输入图像描述

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

  • 将根证书导入受信任的根 CA 证书存储
  • 将中间证书导入中间 CA 证书存储
  • 链接根证书和中间证书并导入到根 CA 证书存储

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

仅供参考 nginx 配置如下

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

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

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

干杯,瑞恩。

4

1 回答 1

1

好的,所以我终于完成了所有工作。有几件事...

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

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

其余的相当容易。

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

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

重启chrome,瞧:

在此处输入图像描述

于 2020-04-22T05:16:06.090 回答