如何使用Apache mod_ssl变量以URI格式验证主题替代名称的内容



我正在研究一个Web服务项目,该项目要求与我的服务连接的客户通过X.509证书进行身份验证,作为相互认证TLS谈判的一部分。除了将客户证书链接到特定的PKI信任链外,我的要求还必须验证证书中的特定值。具体来说,主题DN必须包含一个具有预定值的OU,并且证书必须包含一个主题名称,其uri格式中具有不同的预定值。

我在CentOS 7系统上使用Apache HTTPD 2.4.6,并且能够通过标准的Apache配置指令非常容易地满足这些要求的大多数要求,但除了一个值得注意的例外:我似乎找不到一个可变的例外:这使我能够以URI格式访问主题名称值。查看此处找到的mod_ssl文档:

https://httpd.apache.org/docs/2.4/mod/mod/mod_ssl.html

我可以看到以下主题名称格式的变量:

SSL_CLIENT_SAN_EMAIL_N-客户端证书的主题altname扩展条目类型RFC822Name

ssl_client_san_dns_n-客户端证书的主题altname扩展条目dnsname

ssl_client_san_other_msupn_n-客户端证书的主题altname扩展名称类型eleastername,microsoft用户主名称表单(OID 1.3.6.1.4.1.4.1.311.20.2.2.2.3)

鉴于URI是RFC 5280(X.509/PKI)第4.2.1.6节中定义的主题名称值的独特且有效。是否有一个提供此功能的变量,我根本没有在文档中看到?

进一步审查mod_ssl源代码,很明显,当前根本不支持以URI格式提取SAN值以供变量使用:

注明:
        /*
         * Not implemented right now:
         * GEN_X400 (x400Address)
         * GEN_DIRNAME (directoryName)
         * GEN_EDIPARTY (ediPartyName)
         * GEN_URI (uniformResourceIdentifier)
         * GEN_IPADD (iPAddress)
         * GEN_RID (registeredID)
         */

in https://github.com/apache/httpd/blob/5f32ea94af5f1e7e7a68d6fca58f0ac2478cc18cc18c5/modules/modules/sssl/ssl/ssl_util_util_sssl.c

因此,我问题的答案显然是我目前没有一个可变量来实现此目的,并且满足此要求将需要解决方法(或者将gen_uri的实现推向mod_ssl)。

)。

最新更新