我正在研究一个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)。
)。