【发布时间】:2012-06-03 01:08:57
【问题描述】:
我需要使用 C-land OpenSSL 验证 X509 证书的域。
我的理解是库不会为我做这件事,我必须大致实现以下算法:
- 如果 subjectAlternativeName 扩展的 dnsName 字段存在,请将
name设置为该值。 - 否则,将
name设置为主题的CN字段。 - 将
name与请求的主机名进行比较,允许每个星号匹配 [A-Za-z0-9_]+,但不匹配“点”(.)。
在我看来,应该有大量的代码来执行此操作,但我没有找到任何代码。
谁能找到这方面的例子?或者,对我的算法进行健全性检查?
编辑:这就是我想出的:https://gist.github.com/2821083。 OpenSSL 将其留给调用代码似乎真的很奇怪。
【问题讨论】:
-
不要根据您在证书中找到的内容“设置”值,而应该反过来:检查您期望的内容是否具有匹配的 SAN DNS 条目。这是因为 SAN 扩展中可能有多个 DNS 条目。 (顺便说一句,现在 RFC 6125 中有更精确的通配符匹配规则。)