在OpenSSL中验证证书的域
我需要使用C-land OpenSSL验证X509证书的域 我的理解是,库不会为我这样做,我必须大致实现以下算法:在OpenSSL中验证证书的域,openssl,ssl,x509,Openssl,Ssl,X509,我需要使用C-land OpenSSL验证X509证书的域 我的理解是,库不会为我这样做,我必须大致实现以下算法: 如果subjectAlternativeName扩展名的dnsName字段存在,请将name设置为该值 否则,将name设置为主题的CN字段 将name与请求的主机名进行比较,允许每个星号匹配[A-Za-z0-9_389;]+,但不匹配“点”() 在我看来,应该有大量的代码来实现这一点,但我还没有找到任何代码 有人能找到这样的例子吗?或者,检查我的算法是否正常 编辑:这是我想到的:
name
设置为该值name
设置为主题的CN字段name
与请求的主机名进行比较,允许每个星号匹配[A-Za-z0-9_389;]+,但不匹配“点”()编辑:这是我想到的:。OpenSSL将此问题留给调用代码来解决,这似乎真的很奇怪。尽管要小心主题的替代名称、原始IP地址和FQDN,但您还是非常在行。你可能想偷
BOOL SSL_X509_getIDs(apr_pool_t *p, X509 *x509, apr_array_header_t **ids)
以及ssl_engine_init.c(顺便说一句,它是服务器端)中来自和被调用方的相关朋友
当你在OpenSSL回调上行动时,也要考虑日期和时间,如果你还没有在CTX中提供这个链,则
德瓦 OpenSSL将这一切留给调用代码来完成,这似乎真的很奇怪 是的,这在实践中是非常有问题的遗漏,因为很多应用程序没有意识到他们必须手动执行检查 OpenSSL 1.1.0将包括主机名验证(现在(截至2013年9月)在HEAD
中进行验证)。根据更改日志,有一个-verify\u name
选项,apps.c
响应-verify\u hostname
开关。但是s_client
不响应任何一个开关,因此不清楚如何为客户端实现或调用主机名检查
如果存在
subjectAlternativeName
扩展名的dnsName
字段,请将name设置为该值
可能有多个主题备用名称(SAN),因此请准备好使用多个主题备用名称
否则,将名称设置为主题的CN字段
我相信你也需要检查一下
将名称与请求的主机名进行比较,允许每个星号
匹配[A-Za-z0-9_389;]+,但不匹配“点”()
更痛苦。您还必须确保您没有匹配gTLD或ccTLD。例如,您不希望匹配针对gTLD*.com
颁发的证书。那张证书可能是一个坏蛋签发的;)
CCTLD类似于*.eu、*.us或இலங்கை (nic.lk)。大约有5000个,Mozilla在网站上提供了一个列表。原始列表位于
在我看来,应该有很多代码可以执行 这个,但是我没有找到 除了van Gulik的建议,你还可以试试卷发。我相当肯定Curl包含主机名匹配代码
您甚至可以验证证书的格式是否正确。负责网络环境的小组是CA/浏览器论坛。它们具有创建证书的基线和扩展要求:
- 基准证书要求
- 扩展验证证书要求