我正在从事一个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的访问。是否存在提供此功能的变量,而我在文档中根本没有看到该变量?
答案 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)
*/
中
这样,我的问题的答案显然是我目前没有可用于此目的的变量,而满足此要求将需要一种变通方法(或将GEN_URI的实现推送到mod_ssl)。