在 Azure 配置中访问 ADFS 的 REST API 时,我看到了奇怪的行为。
假设我使用像 OpenSSl 或 DigiCert 这样的工具测试我的站点是否返回正确的证书。例如:
openssl s_client -connect adfs.{mydomain}.com:443
多次运行将交替返回正确的证书和错误的证书。
配置如下:
- 已在 DNS 中创建用于 ADFS、WWW 和 ADRMS 的 CNAMES,将它们指向 {mydomain}testsvc.cloudapp.net,这是 Azure 公共(public)主机。
- 已创建 SAN 证书并将其安装在面向 Internet 的网络服务器上
- 主题名称:www.{mydomain}.com
- 主题备用名称:adfs.{mydomain}.com、adrms.{mydomain}.com、www.{mydomain}.com
- 在网络服务器上运行“Netsh http show sslcert”显示 adfs 和 adrms 的正确证书 Hostname:Port
- 已安装 WebApplicationProxy 以允许我访问 adfs.{mydomain}.com/adfs/oauth2/xxx。
如果我运行稍微不同的测试:
openssl s_client -connect adrms.{mydomain}.com:443
然后,我也交替获得不同的证书。我确定边缘服务器提供了正确的证书,而 adrms 服务器提供了“坏”证书。事实上,该证书确实没问题,只是不应该将其提供给要求 adfs.{mydomain}.com 的人。
那么,为什么对 adfs 的连接请求交替到达边缘服务器和 adrms 服务器?我现在该去哪里寻找这个问题呢?我承认我对 WebApplicationProxy 以及如何通过边缘服务器引导所有流量(包括 adrms 流量)知之甚少。
我可以提供一个真实的 URI,通过私有(private)消息来演示问题。
另外:我怀疑是负载均衡器,因为我的网络日志有很多来自“负载均衡器代理”的请求。但是,我找不到一个已配置的。我用过:
Get-AzureInternalLoadBalancer
Get-AzureRMLoadBalancer
既不返回任何东西。
最佳答案
在发布我的问题后,我有了突破,解决了问题。
我使用的是“经典”管理控制台。我切换到 portal.azure.com 来管理我的部署。当我导航到边缘服务器和 adrms 服务器时,我发现它们都是负载平衡集的一部分。我不确定为什么 PowerShell 脚本没有显示这一点。
为了解决这个问题,我不得不将它们从 LB 集中移除并为边缘服务器重新创建端点。
步骤是:
- 转到管理门户。 (portal.azure.com)
- 选择虚拟机
- 点击我的adrms VM
- 点击负载平衡集
- 点击负载均衡器
- 点击“离开”
- 对边缘 VM 执行相同的步骤
- 为边缘 VM 添加端口 443 的新端点
之所以可行,是因为边缘服务器还处理将流量重定向到 adrms 服务器。
我希望这能让一些人头疼。
关于Azure 负载均衡器问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38250292/