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

时间:2019-02-27 16:00:33

标签: apache ssl x509 mod-ssl

我正在从事一个Web服务项目,该项目要求连接到我的服务的客户端通过X.509证书对自己进行身份验证,这是相互身份验证TLS协商的一部分。除了将客户端证书链接到特定的PKI信任链之外,我的要求还要求我必须验证证书中的特定值。具体来说,主题DN必须包含一个具有预定值的OU,并且证书必须包含一个具有URI格式的不同预定值的subjectAltName。

我在CentOS 7系统上使用Apache httpd 2.4.6,并且能够利用利用常见mod_ssl变量的标准Apache配置指令轻松地满足大多数这些要求,但有一个明显的例外:我似乎找不到一个变量这样就可以访问URI格式的subjectAltName值。查看此处找到的mod_ssl文档:

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

我可以看到以下subjectAltName格式的变量:

SSL_CLIENT_SAN_Email_n-rfc822Name类型的客户端证书的subjectAltName扩展条目

SSL_CLIENT_SAN_DNS_n-dNSName类型的客户端证书的subjectAltName扩展条目

SSL_CLIENT_SAN_OTHER_msUPN_n-客户端证书的subjectAltName扩展条目,其类型为otherName,Microsoft用户主体名称形式(OID 1.3.6.1.4.1.311.20.2.3)

鉴于URI是RFC 5280(X.509 / PKI)第4.2.1.6节中定义的subjectAltName值的独特有效格式,我很困惑为什么mod_ssl无法以这种格式提供对subjectAltName的访问。是否存在提供此功能的变量,而我在文档中根本没有看到该变量?

1 个答案:

答案 0 :(得分:0)

进一步查看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)
         */

https://github.com/apache/httpd/blob/5f32ea94af5f1e7ea68d6fca58f0ac2478cc18c5/modules/ssl/ssl_util_ssl.c

这样,我的问题的答案显然是我目前没有可用于此目的的变量,而满足此要求将需要一种变通方法(或将GEN_URI的实现推送到mod_ssl)。