如果我在安全 LAN 中同时拥有 httpd 和 JBoss,是否可以在 httpd 终止 SSL 请求,并通过 mod_cluster 将请求传递给可用的 JBoss?
知道涉及哪些配置吗?
答案1
默认情况下,mod_cluster 将终止您的 SSL 连接并将信息以未加密的形式传递到后端。请参阅http://docs.jboss.org/mod_cluster/1.0.0/html/UsingSSL.html了解使用说明。
请注意第 12.2 节,其中展示了在代理和后端服务之间使用 SSL 所需的额外配置。第 12.3 节展示了如何转发有关已终止 SSL 会话的信息(如果您的应用程序有理由关心该信息)。
答案2
你可以
仅保护从客户端到平衡器的连接并将平衡器-工作者网络视为可信的:
客户端<--SSL-->平衡器<--AJP/HTTP-->工作者
或者你可以保护整个路径(注意:根据定义,Balancer 实际上是一种中间人攻击 :-),所以你必须完全信任你的平衡器上的工作者......)
客户端<--SSL-->平衡器<--SSL-->工作者
2) 选项有严重的性能缺陷。我将向您展示如何同时执行这两个操作:
1) httpd:
<IfModule manager_module>
Listen 8888
ManagerBalancerName qacluster
<VirtualHost localhost:8888>
ServerName localhost:8888
<Directory />
Order deny,allow
Deny from all
Allow from all
</Directory>
ServerAdvertise on
EnableMCPMReceive
AdvertiseGroup 224.0.1.105:6666
<Location /mcm>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from all
</Location>
SSLEngine on
SSLCipherSuite AES128-SHA:ALL:!ADH:!LOW:!MD5:!SSLV2:!NULL
SSLVerifyDepth 10
SSLCertificateKeyFile /home/karm/Server/server.key
SSLCertificateFile /home/karm/Server/server.crt
SSLCACertificateFile /home/karm/Server/myca.crt
LogLevel debug
</VirtualHost>
</IfModule>
AS7:
<subsystem xmlns="urn:jboss:domain:modcluster:1.1">
<mod-cluster-config advertise-socket="modcluster" advertise="true" sticky-session="true" sticky-session-remove="false" sticky-session-force="false" connector="ajp">
<dynamic-load-provider history="10" decay="2">
<load-metric type="busyness"/>
</dynamic-load-provider>
<ssl key-alias="javaclient" password="tomcat" certificate-key-file="/home/karm/Client/client-cert-key.jks" cipher-suite="AES128-SHA:ALL:!ADH:!LOW:!MD5:!SSLV2:!NULL" ca-certificate-file="/home/karm/Client/ca-cert.jks"/>
</mod-cluster-config>
</subsystem>
现在 AS7 仅使用 HTTPS 向平衡器发送 Mod_cluster 消息。其他平衡器 -> AS7 通信(如客户端的请求)未加密,因为它使用 AJP。
2) httpd:
+++
SSLEngine on
+SSLProxyEngine On
+++
AS7:
+++
-<connector name="ajp" protocol="AJP/1.3" scheme="ajp" socket-binding="ajp"/>
+<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" secure="true">
+ <ssl name="https" key-alias="javaclient" password="tomcat" certificate-key-file="/home/karm/Client/client-cert-key.jks" cipher-suite="AES128-SHA:ALL:!ADH:!LOW:!MD5:!SSLV2:!NULL" protocol="TLS" verify-client="false" certificate-file="/home/karm/Client/client-cert-key.jks" ca-certificate-file="/home/karm/Client/ca-cert.jks"/>
+</connector>
+++
-<mod-cluster-config advertise-socket="modcluster" advertise="true" sticky-session="true" sticky-session-remove="false" sticky-session-force="false" connector="ajp">
+<mod-cluster-config advertise-socket="modcluster" advertise="true" sticky-session="true" sticky-session-remove="false" sticky-session-force="false" connector="https">
+++
关于2)
- 注意 verify-client="false",由于请求是通过平衡器发送的,因此您无法验证客户端......
- 注意性能下降。
- 注意一个令人讨厌的错误https://issues.jboss.org/browse/JBPAPP-9493(可能也会影响当前的 Mod_cluster)
高血压
干杯