mod_ssl配置问题:SSLRequire允许下划线开头变量时出现语法错误
解决Apache SSLRequire匹配客户端证书CN开头下划线的语法错误问题
首先,你的问题出在SSLRequire的正则表达式语法上——Apache的SSLRequire指令使用Perl兼容正则表达式(PCRE),但匹配操作的写法需要符合规范,直接写=~ ^_是不正确的,因为缺少了正则表达式的定界符(比如/),服务器无法识别这是一个正则匹配操作,自然会触发语法错误。
正确的配置写法
把你的SSLRequire行修改为:
SSLRequire %{SSL_CLIENT_S_DN_CN} =~ /^_/
如果需要更严谨地确保CN以下划线开头且后面至少包含其他字符(避免仅单个下划线的无效CN),可以调整为:
SSLRequire %{SSL_CLIENT_S_DN_CN} =~ /^_.+/
完整的可运行配置示例
allow from all SSLOptions +StdEnvVars SSLRequireSSL SSLRequire %{SSL_CLIENT_S_DN_CN} =~ /^_/ SSLVerifyClient require SSLVerifyDepth 5 SSLUserName SSL_CLIENT_S_DN_CN RequestHeader set userid %{REMOTE_USER}s
补充说明
要确保你的Apache安装已经编译了PCRE支持(绝大多数现代Apache部署都是默认启用的),否则正则表达式匹配可能无法正常生效。如果不确定,可以通过httpd -V查看编译参数,确认包含--with-pcre相关选项。
内容的提问来源于stack exchange,提问作者Sarath S
相关产品推荐
相关产品推荐

