我正在用自己的CA创build一个站点,并用它来签署客户端证书。 客户需要将我的CA作为可信来源添加,但出于安全原因,我不希望他们盲目信任可能用CA密钥签名的所有内容,所以我想强制限制来build立客户的信任。 所以我想限制CA的能力,只签署客户端证书,并启用https访问。 我不确定我应该在证书创build中施加什么限制。
最好的办法似乎是名称限制 ,并使用白名单来限制使用,这显然是现在尊重 。 所以我尽pipe我必须使用dns(比如说xyz.com),所以CA签名不会被google.com f.ex接受,并且也会将其放在每个客户端证书的SAN中,所以客户端证书是认为有效并且不被拒绝。 显然这不是它的工作原理。 我已经试过这个,但是我一直无法使它正常工作。 另外,我从Windows获得警告…也许是因为所有可能的名称约束types必须存在 ?
所以我的问题是:
编辑
理想情况下,我的CA证书中应该有一些东西强制它只签署客户端证书并执行https服务器身份validation。 我看不出如何去做这个限制,我认为这是不可能的。
对于使用名称约束,我已经允许使用xyz.com ,并且我认为只有我的CA和SAN xyz.com签名的证书才能被接受(否则我可以使用SAN创build一个证书xyz.com和google.com并可能在访问google.com时工作)。 所以我使用了由我的CA签署的客户端证书,没有SAN xyz.com ,我被接受了。 不知道名称约束是否适用于这种情况。
您可以在颁发证书中设置一些限制条件,限制可以签署的证书。
你已经提到过这些。 可以使用它们来限制哪些名称可以用于结束证书的各种主题替代名称types(使用allowedSubtrees的白名单),也可以不使用(使用excludedSubtrees列入黑名单)。 在实践中,前者可能是你想要的。 一个典型的用例是,只允许电子邮件地址和dnsNames以公司的一个域名结尾。
这个页面给出更多的细节。
该扩展可以指定在哪个策略下可以颁发结束证书。 既然这不是你真的可以在技术上强制执行(除了比较OID),这对你没有用处
这个并不是一个标准的用法,但是因为你的屏幕截图显示你生活在一个微软的世界,所以对你来说可能是有用的。 微软发明了所谓的应用程序策略 ,它允许一个发行证书来限制发行的terminal证书可能具有哪个扩展密钥。 通过将此策略设置为tlsClientAuthentication,可以确保只颁发此类客户端证书,并且不存在TLS服务器证书或代码签名证书。 在微软的宇宙之外,这个扩展可能会被忽略。
最后一句话:检查这些约束是相当困难的,大多数软件甚至不费心去尝试,而且没有太多的产品能够真正正确地使用它们。