使用以下方法查看证书的详细信息:
openssl x509 -noout -text -purpose -in mycert.pem
我发现了一堆目标标志(我发现它们是通过连接到证书的各种扩展设置的)。
其中一个目的标志是“任何目的”。 我似乎无法find此标志上的任何文档,为什么或为什么不设置。
你们有没有人知道我在哪里可以find更多关于这个目的的信息?
谢谢,
Any Purpose : Yes和Any Purpose CA : Yes来自openssl x509 -purpose Any Purpose CA : Yes是特殊的。 它是特定于openssl的,代表了与古代软件版本一起使用时不validation扩展名的证书。
这些特定用途标志不能closures或禁用。 从openssl源代码检查在openssl / crypto / x509v3 / v3_purp.c中定义为static X509_PURPOSE xstandard [] = {…}。 X509_PURPOSE_ANY检查validation函数返回1。
最接近这个标志的正式文件可能是由Stephen N. Henson博士撰写的,他创作的v3_purp.c – http://marc.info/?l=openssl-users&m=96219426811480和http:://openssl.6102.n7 .nabble.com / quot-critical-CA-FALSE-quot-but-quot-Any-Purpose-CA-Yes-quot-td29933.html 。
引用史蒂夫:
“任何目的”设置是什么都可以让任何东西通过,并没有执行任何检查。 如果没有其他select,可以忍受这种后果,人们最初会把它当作一种方式来使用破损的证书。从那时起,即使设置了“任何目的”,CA代码检查在代码中也是强制性的。 所以如果你真的试图用这个证书作为CA,它将被拒绝。
在X.509证书中,如同大多数其他事物一样,如果一个术语没有被明确定义,那么它就会从其紧邻的上下文中inheritance意义。 如果上下文是“生活”,那么“任何目的”这个词的意思就是这个意思。
因此,检查签发CA的“证书政策”,“订户协议”和“依赖方协议”,如果他们对这个标志没有提及,那么就意味着它在框中表示了什么。
KeyUsage是一个v3扩展,它可能会或可能不会出现在证书中。
id-ce-keyUsage值的一个有用的(如果有点过时的)摘要: http : //www.alvestrand.no/objectid/2.5.29.15.html [新添加的值是7 = encipherOnly和8 = decipherOnly]
诀窍是,这个“OID = 2.5.29.15 keyUsage扩展”/可能或可能不会/存在于特定的证书中。
什么OpenSSL可能与PURPOSE_ANY假设,这个扩展是/不存在/,因此,这是“由你自己的政策”决定什么使用或不使用它。 否则,没有对应于“ANY”的位图值…
来自: http : //en.wikipedia.org/wiki/Digital_certificate
密钥用法:公钥的目的(例如encryption,签名,证书签名等)。
请参阅openssl文档中的-purpose标志: http : //www.openssl.org/docs/apps/x509.html#CERTIFICATE_EXTENSIONS
大多数证书的发行都具有受限制的目的(或一组目的),例如客户端身份validation,服务器身份validation,密钥交换和代码签名。 如果它们被用于不被认可的目的(例如使用你的电子邮件证书来签署代码),它们是无效的。
任何目的扩展只是意味着证书应该总是传递使用约束,这与所有用法都是一样的。
OpenSSL的“目标”内容不完全是对v3证书的Key-Usage扩展的直接反映。
OpenSSL本身定义了一组“目的”,然后有一些逻辑确定给定证书是否与基于证书扩展select的目的一致,包括但不限于密钥使用和扩展密钥使用扩展。
如果你传递-purpose any openssl verify或者你编写的代码使用例如SSL_CTX_set_purpose()来设置OpenSSL上下文的目的为“任何”值,那么“任何目的”就是你得到的。
大部分目的都logging在man x509部分CERTIFICATE EXTENSIONS – 它解释了证书对于给定目的必须是有效的属性 – 但是这没有certificateany目的。 在源代码中,在crypto/x509v3/v3_purp.c的顶部,您可以看到crypto/x509v3/v3_purp.c的检查函数是no_check() ,它简单地返回1:实际上它禁用了用途检查。
我不确定你是否可以devise出任何证书对于any目的都是无效的情况。 我也不确定在设定目的和不设定目的之间有什么区别,应该使目的检查完全被绕过。
具体而言,OpenSSL的X509_PURPOSE_ANY /“Any Purpose”/指定-purpose any概念与RFC 5280 anyExtendedKeyUsage KeyPurposeId不同。
通常,我在根CA上设置“AnyPurpose”(这意味着这是根证书,可以颁发证书给任何其他中间或子CA),然后,当颁发中间体CA时,我设置限制…
我的根CA有:
在我的中级TLS CA上,例如我设置了:
这限制了TLS CA从根CA的所有属性inheritance(限制性的OID在这里只允许标记TLS证书,并且pathlen:0我将禁止子CA)。
一切都取决于你如何设置你的PKI基础设施。
在我的networking中,我为每个目的执行一个中间CA,例如:
这样,如果邮件证书出现问题,我只需要撤销电子邮件CA,而所有其他中间CA都可以。
大的authentication机构例如有一个专门的中间CA到EV。
注:这是个人PKI,如果你希望按照RFC和大型authentication机构的最佳实践做某些事情,那么还有很多额外的performance,比如包含更多的OID并设置所有这些…
例如,你可以阅读这个链接的一些标准:
https://cabforum.org/wp-content/uploads/Baseline_Requirements_V1.pdf
另一个例子,对于EV证书还有很多额外的步骤设置OID:
而且由于我的设置不需要这些,所以我没有花费时间search和testing必要的OID来获得这个工作