Dou*_*app 6 apache ssl proxy ajp mod-proxy-ajp
我已经设置了一个Apache Web Server 2.4来充当Apache Tomcat 7 的代理,通过AJP协议( Apache 端的mod_proxy_ajp和 Tomcat 端的 AJP 连接器)进行通信。一切都非常适合基本功能。
现在,我希望设置一些特定的 AJP 属性,但无法完全使其工作......
查看mod_proxy_ajp页面(http://httpd.apache.org/docs/current/mod/mod_proxy_ajp.html),在请求数据包结构部分下,我看到属性列表。这些属性包括诸如remote_user和ssl_cert之类的属性(代码值分别为0x03和0x07)。还有一个名为req_attribute的“所有其他”属性,其代码值为0x0A,可用于设置 AJP 请求中的任意属性。
此外,在同一页面的“环境变量”部分下,它声明了以下内容:
名称具有前缀 AJP_ 的环境变量将作为 AJP 请求属性转发到源服务器(从键名称中删除 AJP_ 前缀)。
这看起来很简单,事实上,我可以通过设置名为“AJP_doug-attribute”的 Apache 环境变量并分配相关值来轻松设置任意 AJP 属性,例如“doug-attribute”。完成此操作后,我可以使用 Wireshark 分析流量,并看到剖析的 AJP 块中显示的“doug-attribute”字段,前缀为十六进制值 0x0A(上面列出的“req_attribute”类型)。到目前为止,一切都很好。
现在我想尝试设置ssl_cert属性。以同样的方式,我设置了一个名为“AJP_ssl_cert”的环境变量。这样做后,它确实会显示在 Wireshark 中,但带有前缀代码“0x0A”。此外,我想要读取“javax.servlet.request.x509certificate”的 Java 应用程序找不到该证书。
但是,我还注意到网站上列出的Wireshark捕获中的一些其他属性,例如ssl_cipher和ssl_key_size。但在捕获中,它们显示为“SSL-Cipher”和“SSL-Key-Size”(并具有适当的“0x08”和“0x0B”前缀代码)。因此,我尝试再次设置 cert 属性,这次设置为“SSL-Cert”,但得到的结果与之前相同。
为了进行比较,我更改了 Apache 配置以要求客户端证书,然后在访问关联网页时在浏览器中提供了一个证书。此时,我查看 Wireshark 捕获,果然,现在有一个名为“SSL-Cert”的属性,代码为“0x07”,并且我在 Tomcat 中的 Web 应用程序能够成功找到该证书。
有什么方法可以手动设置 mod_proxy_ajp 页面上列出的属性,或者模块处理它们的方式是否与其他任意请求属性(例如“doug-attribute”)不同?我觉得这里一定有什么东西是我想念的。
作为一些背景,我尝试这样做的原因是我有一个配置,其中多个 Apache Web 服务器相互代理,最后,一个 Apache Web 服务器通过 AJP 代理到 Tomcat 实例。所有 Apache Web 服务器都使用 SSL 并需要客户端证书。只需一台 Apache 服务器,Tomcat 就可以很好地接收用户的证书,而无需我进行任何特殊配置。但是,对于多个,它最终会收到先前 Apache 代理的服务器证书(使用 SSLProxyMachineCertificateFile 指令在该计算机上设置)。
我希望做的是将原始用户的证书放入中间代理请求的标头中,然后在后端的 AJP 属性中手动设置该证书,以便 Tomcat 中的 Web 应用程序可以读取该证书并使用它执行其授权内容(这部分已经确定,否则我只需将证书添加为标头并使 Java 应用程序读取标头)。
编辑:当然,如果有一种更简单的方法来完成通过代理链传递用户证书,我会非常高兴听到它!:)
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |