在 Linux 上部署 aspnet 核心应用程序时,通常通过反向代理来完成。即 Kestrel 托管应用程序,Apache 处理与 Kestrel 通信的公共互联网流量。
所以 Kestrel 和 Apache 需要用于 https 的 SSL 证书。
该应用程序中还Identity Server 4
使用了需要证书的功能。
我以前使用过 Kestrel 和 Identity Server 的自签名证书。但现在我在想 - 这是正确的方式吗?
问题 -使用 3 个不同的证书是否更安全,或者我可以只为所有 3 个证书使用一个 CA 证书?
恐怕这个问题没有简单的是/否答案。
如果 Kestrel 和 Apache 在同一个机器上运行,那么您只是在有效地使用证书,因为 Kestrel 需要一个。它不提供安全性,它更安全吗?问题不适用。
如果 Kestrel 和 Apache 在不同的盒子上,那么它会稍微复杂一些。如果这两个盒子在一个受信任的网络上,你可以和上面一样争论——证书在那里只是因为 Kestrel 需要一个。
如果网络不受信任,您现在需要一些安全措施。该证书提供发起 TLS 连接所需的机器身份。无论您为此使用自签名证书还是 CA 签名证书,都会增加更多选择。
app.local
)并且 CA 不愿意证明这些名称(例如商业 CA 不会这样做),那么您将被迫使用自签名证书。因此,假设现在您可以为 Kestrel 使用 CA 证书,接下来您需要问自己为什么需要这样做:
CA 签名证书通常在一对多场景中变得有价值。如果您有一台服务器和许多依赖方(客户端),那么 CA 颁发的证书可确保:
但是,如果您处于一对一的场景中(例如在反向代理和应用程序服务器之间),那么 CA 带来的好处就更少(信任决策更容易,更新也很容易,如果服务器受到威胁,您只需删除来自一位客户的证书)。事实上,如果您没有可用的 CA,仅为应用程序服务器和反向代理之间的连接而构建和管理 CA 的开销太大,以至于不值得。
对于后者,使用自签名证书的唯一缺点可能是缺乏中央管理。许多 CA 帮助管理已颁发证书的生命周期,即使它是简单的自动电子邮件提醒您证书即将到期,或者像自动续订一样复杂。自签名证书由您管理。为了帮助缓解这种情况,一些组织使用证书生命周期管理工具来管理他们的证书,如果该工具也可以监控自签名证书,那么就可以解决这个问题。
因此,总而言之,如果您的 CA 提供额外的生命周期管理服务来帮助您管理证书,那么它可能值得考虑;但除此之外,在应用程序服务器和反向代理之间等一对一场景中,使用自签名证书还是 CA 签名证书并没有真正的区别。
如果您确实遵循 CA 为应用程序服务器颁发的证书的路线,您有更多的决定:
如果应用程序和反向代理在同一个盒子上,您可以安全地考虑在它们之间使用一个证书 - 您不太可能处于一种服务受到损害而另一种服务仍然受信任的情况。你会(应该)假设一个盒子上的所有证书都被泄露了,所以单独的证书通常没有真正的好处。
如果应用程序位于不同的盒子上,那么您可能会遇到一个被入侵而另一个没有被入侵的情况。在为此类情况做准备时,您应该在每个盒子上贴上不同的证书。
请注意,虽然上面讨论了应用程序服务器和反向代理之间的通信,但您可以尝试使用Identity Server 4进行相同的推理(无论是什么)。