我可以使用自己的证书颁发机构通过 LAN 进行 HTTPS 吗?

问题描述 投票:0回答:1

我有一个服务器和一些客户端,它们都运行在不同的 Docker 容器上。用户可以通过在浏览器(运行客户端 docker 的地方)上输入 localhost:3000 来使用客户端。 所有容器都在同一 LAN 上运行。我想使用 HTTPS。 我可以使用自己的 CA 签署公钥私钥对,然后将 CA 的公钥加载到浏览器吗? 我想对公共域使用正常流程,但在内部使用我自己的 CA。 或者我应该寻找其他解决方案?

ssl https certificate client-certificates ca
1个回答
1
投票

Meta:既然你现在已经公开了nodejs,这使它至少处于话题性的边缘。

一般来说,PKIX(在 SSL/TLS 中使用,包括 HTTPS)的工作方式是服务器必须拥有私钥和匹配的证书;无论您使用公共 CA 还是您自己的 CA(如您所愿),这都是相同的。服务器还应该具有验证其证书所需的任何中间或“链”证书;公共 CA 将始终需要此类链证书,因为 CABforum 规则(编纂常见最佳实践)禁止直接从根颁发“订户”(EE) 证书,而您自己的 CA 取决于您 - 您可以选择是否使用中间体,尽管正如我所说,使用它们并使根私钥保持“离线”被认为是最佳实践——在密码学中,这意味着不在与任何人通信的任何系统上,例如在本例中请求证书的服务器,从而消除了一种攻击途径——在“气隙”(未连接或什至无法连接到任何网络)的专用设备上以及在锁定的保险库中,可能具有“篡改保护”,这是一种礼貌的做法自毁的名称。作为保护像重要 CA 的根密钥这样敏感的东西所需的严格性的一个已知示例,请比较 Stuxnet。

客户端不需要也不应该配置服务器证书,除非您想进行固定;它(他们)do需要CA根证书。大多数客户端,特别是浏览器,已经内置了许多/大多数/所有公共 CA 根证书,因此使用来自此类 CA 的证书不需要对客户端执行任何操作;使用您自己的 CA 的 OTOH 需要将您的 CA 证书添加到客户端。 Windows 上的 Chrome 使用 Microsoft 提供的 (Windows) 商店;您可以显式添加此内容(使用 GUI 对话框、certutil 程序或 powershell),尽管在域管理环境(例如企业)中,使用 GPO“推送”CA 证书(或多个证书)也很流行。 Firefox 默认情况下使用自己的信任库,您必须显式添加到该信任库,但是(尽管我在 2022 年第一次写这个答案时并不知道)自 2018 年左右开始,它可以选择使用 Windows 信任库,最近还可以选择使用 macOS “钥匙扣”。

在nodejs中,您可以配置私钥、服务器证书和链证书(如果需要),如记录的

PS:请注意,您通常应该,对于 Chrome(以及新的 Edge,实际上是 Chromium)必须,在服务器证书中使用SubjectAlternativeName (SAN) 扩展指定其域名,或者可选的 IP 地址),而不是(或不仅是)CommonName (CN) 属性,您会在网络上的许多过时和/或不合格的说明和教程中发现这一点。更新:从 2023 年开始,这对于 Firefox 来说也是必须的。 OpenSSL 命令行使执行 CommonName 变得容易,但执行 SAN 就不那么容易了;多个 Stack 上都有关于此的许多 问题。大约 2010 年之后,任何公共 CA 都会自动执行 SAN。

© www.soinside.com 2019 - 2024. All rights reserved.