我正在用自己的 CA 创建一个网站,并用它签署客户端证书。客户端需要将我的 CA 添加为受信任的来源,但出于安全原因,我不希望他们盲目信任所有可以使用 CA 密钥签名的内容,因此我想施加限制以建立客户端的信任。因此,我想将 CA 的能力限制为仅签署客户端证书和启用https
访问权限。我不确定在证书创建中应该施加的所有限制。
最好的办法似乎是名称约束并使用白名单来限制使用,这是如今显然受到尊重。因此我认为我必须使用 DNS(假设为 xyz.com),这样 CA 签名就不会被 google.com f.ex 接受,并且将其也放在客户端证书的每个 SAN 中,这样客户端证书就被视为有效且不会被拒绝。显然,它不是这样工作的。我试过这个,但我无法让它正常工作。此外,我收到了来自 Windows 的警告...也许是因为所有可能的名称约束类型都必须存在?
我的问题是:
- 我应该如何配置 CA 证书?我应该在 CA 证书中应用哪些限制来限制其被滥用的能力?如果涉及名称限制,为什么图片中的示例不起作用?
- 客户端证书中是否还有什么额外的事情需要做/考虑,比如添加额外的 SAN?
编辑
理想情况下,我的 CA 证书中应该有一些内容强制它仅签署客户端证书并执行 https 服务器身份验证。我不知道如何做出这种限制,我认为这是不可能的。
对于名称约束的使用,我已将其xyz.com
作为允许使用,并且我认为只有由我的 CA 使用 SAN 签名xyz.com
并实际使用该名称的证书才会被接受(否则我可以使用 SAN 创建证书xyz.com
,并且google.com
在访问时可能会起作用google.com
)。因此,我使用了由我的 CA 签名的客户端证书(没有 SAN)xyz.com
,并且被接受了。不确定名称约束是否也适用于这种情况。
答案1
您可以在颁发证书中设置一些约束,限制其可以签署的证书。
名称约束
你已经提到了这些。它们可以用来限制哪些名称可以在各种主题替代名称最终证书的类型(使用白名单允许子树)或不得使用(使用黑名单排除子树)。实际上,前者可能是您想要的。一个典型的用例是,仅允许以您公司域名之一结尾的电子邮件地址和 dnsName。
这一页提供更多细节。
策略约束
此扩展可以指定根据哪种策略可以颁发最终证书。由于这不是您真正可以技术执行的事情(除了比较 OID),所以这对您没有用
扩展密钥用法
这个实际上不是标准用法,但由于您的屏幕截图表明您生活在 Microsoft 世界中,因此它可能对您有用。Microsoft 发明了所谓的应用程序策略允许颁发证书限制已颁发的最终证书可能具有的扩展密钥用法。通过将此策略设置为 tlsClientAuthentication,您可以确保只颁发此类客户端证书,而不颁发 TLS 服务器证书或代码签名证书。在 Microsoft cosmos 之外,此扩展可能会被忽略。
最后说一句:检查这些约束非常困难,大多数软件甚至懒得去尝试,而且实际上也没有多少产品能够做到这一点。