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

标签 apache ssl x509 mod-ssl

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

我在 CentOS 7 系统上使用 Apache httpd 2.4.6,并且能够通过利用常见 mod_ssl 变量的标准 Apache 配置指令相当轻松地满足大多数这些要求,但有一个明显的异常(exception):我似乎无法找到一个变量这允许我访问 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 - otherName 类型的客户端证书的 subjectAltName 扩展条目,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 不提供对这种格式的 subjectAltNames 的访问.是否有一个变量提供了我在文档中根本没有看到的这种功能?

最佳答案

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

关于apache - 如何使用 Apache mod_ssl 变量验证 URI 格式的主题备用名称的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54909585/

相关文章:

ssl - 在 IIS Express 下使用受信任的根(非自签名)证书

java - 在没有 BouncyCaSTLe 的情况下以编程方式为 SSL Client-Auth 创建客户端证书的任何方法?

python - 我需要一个简单的 python 'database',它可以在 apache 下与多个用户一起工作

php - 如何获取启用了 php 的 apache 模块列表

apache - 无法在本地主机之外访问 WAMP 站点的 https 版本

wcf - 简单 WCF SSL Web 服务

node.js - 使用 godaddy gd_bundle.crt 运行 SSL node.js 服务器

java - 是否可以使用java中的apache tika从excel表(从列或行)中获取特定数据?

c - 我想了解如何覆盖一组 C 结构?

php - 将 http 更改为 https 后 wordpress 关闭