ssl - 正确层的正确 SSL 证书

标签 ssl cryptography ssl-certificate cloudflare

我有一个需要相当严格的安全性的网络应用程序。我已经有了一个相当安全的解决方案堆栈,包括 Cloudflare、HAProxy 和 Modsecurity。在构建暂存和生产环境之前,我即将准备好我的开发环境以进行测试。

我很想在我的负载均衡器和 Web 服务器上使用 Cloudflare Origin SSL 证书,但我遇到了一个问题。

我渴望通过 Cloudflare 实现完全(严格)加密,这意味着 Cloudflare 将根据每个请求验证证书。所以我想使用 Cloudflare Origin 证书,但看起来我只能在我的 Load Balancer 上使用 Cloudflare Origin 证书,因为它专为 Cloudflare 到 Origin 数据流而设计,这让我不得不从 CA 购买证书对于我的网络服务器。

这是覆盖三个 SSL 终止点的三个 SSL 证书:

End User      --> Cloudflare (via Dedicated cert)
Cloudflare    --> Load Balancer
Load Balancer --> Web Server

我尝试在 Web 服务器上安装 Origin 证书,但无法验证该证书的有效性。我什至已将 OpenSSL 更新到最新的稳定版本 (v1.1.1b),以确保我可以为 TLS 1.3 做好准备。

所以我只能想到两种可能的方法:

End User      --> Cloudflare (via Dedicated cert)
Cloudflare    --> Load Balancer (via Cloudflare Origin cert)
Load Balancer --> Web Server (via DigiCert cert)

End User      --> Cloudflare (via Dedicated cert)
Cloudflare    --> Load Balancer (via Digicert cert)
Load Balancer --> Web Server (via Digicert cert)

如果我错过了任何重要的事情,我将不胜感激。

最佳答案

证书通常包含 Web 服务器 DNS 作为“通用名称”。您需要使事情与之兼容;这确实意味着要么在负载均衡器上安装额外的信任点,要么获得“真实”证书。

通常,您的端点可以使用单个证书来标识自己。问题是当前您使用的证书无法在各个端点构建信任链。您当然可以通过购买可以为其构建链的证书来解决此问题(例如,来自商业 CA)。但是,您通常也可以更新信任库以包含其他证书,以便可以构建信任链。在那种情况下,您可以使用自己的证书;毕竟这是您的基础架构。

您不想做的是在多台机器上使用叶证书,因为这意味着您将私钥复制到更多机器。机器的安全性应该是独立的,因此如果您开始复制 PKCS#12 文件,您可能需要重新考虑您的 key 管理解决方案(如果您没有明确的 KM 解决方案,那么这将是正确的时间)。

关于ssl - 正确层的正确 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55289877/

相关文章:

java - java SSLSocketFactory如何在SSL期间从 keystore 选择服务器证书和私钥

ssl - 端口更改时的 Openssl 错误

android - SDK 管理器未知主机 dl-ssl.google.com

c# - 为什么我的 SHA-1 函数在 C# 中为两个文件显示相同的输出?

java - 让 Java 只接受一个 SSL 证书

python - NLTK 下载 SSL : Certificate verify failed

blackberry - 尝试使用 Connector.open() 打开 TLS 连接时在 BlackBerry 上抛出 EOFException

java - 为什么保存并重新加载 KeyStore 后 Key.getAlgorithm 返回不同的结果

php - 与 libsodium 的安全 key 交换

security - SSL/TLS 通信是否需要两个公钥,一个用于 CA,另一个用于服务器?