我在使用 Apache 2.2 时遇到了麻烦,我找到的文件SSLRequire 函数。我尝试使用以下方法检查请求中客户端证书的电子邮件属性:SSL要求。
httpd.conf 文件中的以下选项运行良好:
SSLRequire %{SSL_CLIENT_S_DN_Email} in { "[email protected]" }
但正如我在文档中读到的,您可以使用值列表进行过滤。
引自官方文档:
file
(filename)- 此函数接受一个字符串参数并扩展为文件的内容。这对于将此内容与正则表达式进行匹配等特别有用。
因此,按照文档,我在 httpd.conf 文件中放入了以下内容:
SSLRequire %{SSL_CLIENT_S_DN_Email} in { file("/etc/httpd/mail-list") }
文件 mail-list 仅包含一行内容[email protected]
(尝试模拟没有 时有效的选项file
)。
但是当我尝试访问我的 HTTPS 服务器时,我在日志中看到以下内容:
Failed expression: %{SSL_CLIENT_S_DN_Email} in { file("/etc/httpd/mail-list") }
当无法应用模式时,通常会出现此消息。有人能帮我吗?我该如何使用此功能?
答案1
根据这个老话题在 apache-modssl 邮件列表上,file()
将文件内容读入单个字符串,因此引用文件中的特殊字符(例如换行符)可能会破坏语法SSLRequire
。
鉴于这是的原作者发布的mod_ssl
,我相信这个理论是正确的。
尝试以下内容/etc/httpd/mail-list
:
"[email protected]","[email protected]","[email protected]"
没有尾随换行符
答案2
file() 确实将文件内容读入单个字符串(如 M. Jessen 所述)。但是,这并不意味着您可以在此文件中使用 apache 表达式语法。您需要使用正则表达式在字符串内进行搜索,因为 apache 似乎无法根据分隔符拆分字符串。
您可以使用以下解决方法AuthBasicFake并将有问题的变量作为基本身份验证用户名与普通的基本身份验证提供程序一起使用。