Intranet 中的自签名 TLS 证书

Posted

技术标签:

【中文标题】Intranet 中的自签名 TLS 证书【英文标题】:Self-signed TLS certificates in Intranet 【发布时间】:2017-10-02 13:50:14 【问题描述】:

我正在用 C# 编写一个系统,它由 REST API 服务器组成,使用 HttpListener 和 WPF 客户端应用程序编写,使用 HttpClient,我想使用 HTTPS。

据我所知,在服务器端,我所要做的就是运行带有 https 前缀的 HttpListener 并将我的证书(例如使用 makecert 创建)绑定到正确的端口 - 现在所有通信都已加密。

在客户端,我必须将证书的公共部分放在当前用户存储中,以便它可以被信任。

服务器不是公开的,每个客户端只有在登录到他们的 *** 后才能访问自己的实例。

我的问题: 1. 自签名证书是否足够安全?为新客户生成新证书是否更安全(例如,从许可证数据)? 2. 如何生成证书的“公共部分”和“私人部分”?如何发货?

它不是银行,所以我不想过度破坏安全性,但我不想走“信任所有证书”的方式。

【问题讨论】:

内网域内的机器是否已加入?如果是这样,您可能需要考虑在合适的服务器上安装证书服务并从那里管理证书。 嗯,这是一种方式,我不认为每个客户端都会允许我安装通过网络推送证书的东西,并不是每个人都已经运行了证书服务来允许我添加另一个证书 【参考方案1】:

安全性通常取决于您的私钥的保护程度。使用的算法可以与公共签名证书上的相同。

使用自签名证书没有继承安全性的收益或损失。

更大的问题是您的公钥在成员系统之间的分配。如果您在域控制器上运行域范围的 CA,它应该相对容易。

如果你不这样做,你也许可以通过组策略来做到这一点。

在任何情况下,它都需要管理员干预才能使其在您的所有系统上运行,并且如果私钥被泄露。

如果您的外部客户端未连接到您的 DC,就会出现问题。那么LetsEncrypt绝对是更好的选择。

【讨论】:

所以,如果我使用 Lets Encrypt(我不知道存在这样的东西),我的 WPF 客户端应用程序将自动接受该证书,因为 LE 是受信任的,我不需要推送证书到客户端机器,对吧? 公共 LE 根证书必须位于计算机本地受信任的根证书存储中。如果不是,您可以将其与您的 WPF 应用程序捆绑在一起。因此,您不需要将自签名证书分发给所有可能比 LE 根证书更频繁地更改的系统。 谢谢,你能告诉我如何在我的程序中捆绑信任根吗?我有一种强烈的感觉,我将来会需要这些知识:) 见this question。如果您想按机器而不是按用户存储它,则需要提升权限。 哦,我以前发现过。我想知道更多关于某些计算机长时间未更新并且可能不了解 LE 的情况。我将深入研究他们的文档。再次感谢【参考方案2】:

我相信您还必须将自签名证书的公钥添加到受信任的根证书颁发机构存储中。 这当然很麻烦,因为您必须在每个客户端上都这样做......

你不能使用LetsEncrypt颁发的证书吗?

【讨论】:

以上是关于Intranet 中的自签名 TLS 证书的主要内容,如果未能解决你的问题,请参考以下文章

Openssl:错误“证书链中的自签名证书”

Openssl:错误“证书链中的自签名证书”

SSL证书问题:证书链中的自签名证书

Heroku 登录错误:证书链中的自签名证书

Ionic Cordova 资源错误:证书链中的自签名证书

Apollo 服务器 RESTDataSource - 接受自签名证书