我们希望使用已经存在且正在运行的 Apache 2.4 反向代理(例如集中监控、mod_security 等好处)保护我们的 VMWare vsphere 6.5 Web 客户端。
通信客户端 <--> 代理和代理 <--> 后端 (= vsphere) 都必须采用 TLS 保护。证书已到位且正常。DNS 已相应配置。
客户端已经可以通过代理成功访问 vsphere 起始页,例如 https://vsphere.domain.tld/
Firefox 的网络分析显示所有请求均正常并被接受,例如
302 GET /vsphere-client/ [FQDN] document html
直到 /vsphere-client/UI.swf
但是,只要用户点击“vSphere Web Client (Flash)”链接进行身份验证并进入菜单,就会抛出状态代码 400。“vSphere Web Client (Flash)”链接指向 /vsphere-client/,显然会调用 SAML 请求。
400 GET https://vsphere.domain.tld/websso/SAML2/SSO/vsphere.local?SAMLRequest=zVRba9sw[...] [FQDN] subdocument
vsphere sso 日志显示:
tomcat-http--38 ERROR org.opensaml.common.binding.decoding.BaseSAMLMessageDecoder] SAML message intended destination endpoint 'https://vsphere-internal.domain.tld/websso/SAML2/SSO/vsphere.local' did not match the recipient endpoint 'https://vsphere.domain.tld/websso/SAML2/SSO/vsphere.local'
到目前为止,Apache 反向代理上的虚拟主机配置(摘录):
SSLProxyEngine on
ProxyPreserveHost on
ProxyRequests off
ProxyPass / https://vsphere.domain.tld/
ProxyPassReverse / https://vsphere.domain.tld/
ProxyPass /vsphere-client https://vsphere.domain.tld/vsphere-client/
ProxyPassReverse /vsphere-client https://vsphere.domain.tld/vsphere-client/
ProxyPass /websso/SAML2/SSO https://vsphere.domain.tld/websso/SAML2/SSO/
ProxyPassReverse /websso/SAML2/SSO https://vsphere.domain.tld/websso/SAML2/SSO/
# new, to solve the name binding problem (see 1st answer)
RequestHeader set Host "vsphere-internal.domain.tld"
通过最后的“RequestHeader”附录 - 实际上只是反转了 PreserveHost 选项 - 我现在能够看到 vsphere 登录页面并登录,但该页面再次卡住:
tomcat-http--10 ERROR com.vmware.identity.BaseSsoController] Could not parse tenant request java.lang.IllegalStateException: org.opensaml.xml.security.SecurityException: SAML message intended destination endpoint did not match recipient endpoint
关于如何获取完整页面,有什么建议吗?
答案1
我想通过将后端主机名(= vsphere web 客户端)添加到 Apache 的 vhost conf 来解决第一个问题,即“预期的目标端点...与接收端点不匹配”:
RequestHeader set Host "<backend hostname>"
(此处:vsphere-internal.domain.tld),但正如 ezra-s 正确解释的那样,这只是反转了 PreserveHost 选项。所以我删除了 RequestHeader 和 PreserveHost 选项。仍然遇到第二个问题...