Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OpenSSL中验证证书的域_Openssl_Ssl_X509 - Fatal编程技术网

在OpenSSL中验证证书的域

在OpenSSL中验证证书的域,openssl,ssl,x509,Openssl,Ssl,X509,我需要使用C-land OpenSSL验证X509证书的域 我的理解是,库不会为我这样做,我必须大致实现以下算法: 如果subjectAlternativeName扩展名的dnsName字段存在,请将name设置为该值 否则,将name设置为主题的CN字段 将name与请求的主机名进行比较,允许每个星号匹配[A-Za-z0-9_389;]+,但不匹配“点”() 在我看来,应该有大量的代码来实现这一点,但我还没有找到任何代码 有人能找到这样的例子吗?或者,检查我的算法是否正常 编辑:这是我想到的:

我需要使用C-land OpenSSL验证X509证书的域

我的理解是,库不会为我这样做,我必须大致实现以下算法:

  • 如果subjectAlternativeName扩展名的dnsName字段存在,请将
    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/浏览器论坛。它们具有创建证书的基线和扩展要求:

    • 基准证书要求
    • 扩展验证证书要求
    例如,在基线文档中,您会发现,作为通用名称(CN)列出的IP也必须列在主题备用名称(SAN)中

    在扩展文档中,您会发现扩展验证(EV)证书中不能存在保留IP(RFC 1918);EV证书不能包含通配符。

    不应根据证书中的内容“设置”值,而应采用另一种方法:检查您期望的内容是否具有匹配的SAN DNS条目。这是因为SAN扩展中可能有多个DNS条目。(顺便说一句,现在RFC6125中有更精确的通配符匹配规则。)