我们公司使用一个带有几个网站的网络服务器(私有和公共,通过 HTTP 和 HTTPS,一些低风险和一些高风险,包括在线支付或其他敏感数据)。
在我们上一个项目中,我们通过 Web 服务与合作伙伴公司进行了沟通。他们想使用自己颁发的证书来保护连接。所以我们必须在我们的网络服务器上安装他们的根证书“PrivateCompany Root CA”。
这到底有多糟糕?在什么情况下我们的安全可以被篡改?
我们公司使用一个带有几个网站的网络服务器(私有和公共,通过 HTTP 和 HTTPS,一些低风险和一些高风险,包括在线支付或其他敏感数据)。
在我们上一个项目中,我们通过 Web 服务与合作伙伴公司进行了沟通。他们想使用自己颁发的证书来保护连接。所以我们必须在我们的网络服务器上安装他们的根证书“PrivateCompany Root CA”。
这到底有多糟糕?在什么情况下我们的安全可以被篡改?
所以我们必须将他们的根证书“PrivateCompany Root CA”安装到我们的网络服务器上。
为什么?全球信任的 CA 在浏览器等通用客户端中很有用。
但是,如果您从自定义客户端使用特定的 Web 服务,您可以在本地添加该 CA。每个体面的 SSL 客户端都允许您影响证书验证。例如,通过指定 CA 的自定义列表。
如果您这样做,则该 CA 只能用于拦截这些请求。由于 CA 和目标域属于同一个实体,因此这不会造成很大的风险。它比使用标准 CA 更安全。
这到底有多糟糕?
如果他们(或设法窃取他们的 CA 证书的人)相对于您的服务器处于中间人位置,他们可以拦截您的客户端使用全局 CA 存储的任何 SSL 流量。它不仅限于他们的领域。
只有完全信任您已安装的 CA。这意味着,受信任的 CA 可以签署哪些证书没有任何限制。所以它也可以为他们不拥有的网站(例如banking.com)签署假证书,你会接受它们。
我不知道你是如何与合作伙伴沟通的,但是对于 Perl、Python 等语言,你可以指定一个 CA 存储,它只用于这种特定的通信。通过这种方式,您可以进行正常通信,并且与合作伙伴的通信使用不同的受信任 CA 集。
就其他证书颁发机构 (CA) 根证书的安全性而言,如果您要实施授权的证书颁发机构 SSL 证书,则没有任何问题。
如果安全证书来自受信任的证书颁发机构,那么它永远不会引起任何安全问题。
在某种程度上,公司能做的仅限于
名称约束(如果有的话)
增强的密钥用法(如果有)
当然,这取决于客户端软件正确验证链中的每个中间证书,直到并包括根。
某些客户端软件可能不会验证链和/或跳过某些检查,因此证书将被视为有效,即使该链已“正确配置”以将使用限制为特定目的和/或域。
要了解软件问题的严重程度,请查看此 google 搜索,其中讨论了许多禁用证书验证的C# 方法。