我们使用填充队列的Azure Service Bus和Azure Web App。它们位于同一资源组中。我们使用WindowsAzure.ServiceBus v2.6.5。
我们很少收到此错误:
X.509证书CN = servicebus.windows.net不在受信任的人员商店中。 X.509证书CN = servicebus.windows.net链建设失败。使用的证书具有无法验证的信任链。替换证书或更改certificateValidationMode。无法将证书链构建到受信任的根颁发机构。
问题:Azure上出现此内部错误?如果不是,我们可以做些什么来避免这个错误?
答案 0 :(得分:6)
我设法找到了有关此问题的更多信息。首先, 需要确定的是,这是一个纯粹的客户问题 这就是为什么没有跟踪ID。客户拒绝完成 与服务总线的TLS握手。
这是一个众所周知的问题,这是微软的一个已知问题 管理证书以及如何在非HTTP(S)传输上使用它们。 托管中间件的端点发生错误 Microsoft的证书不可用或缓慢或无法访问 由客户出于任何原因。我们正在调查一个解决方法 将所需的额外证书注入到TLS握手中 SBMP和AMQP传输类似于HTTP.SYS的工作方式, 这样就不需要这个额外的请求了。
可用的即时解决方法是启用 ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Https 这将强制所有流量使用WebSockets隧道 受先前的TLS / HTTPS握手保护,并且握手携带 所需的中间证书。 WebSockets握手确实如此 建立连接时会增加一些额外的延迟,但是 否则将与常规通信模式相媲美。该 通过该隧道使用的消息传递协议仍然是AMQP或 NetMessaging,所以你不应该担心获得HTTP特性 选择此选项时。
这是微软的回应。我会申请这个,如果我在某段时间内没有遇到任何问题,我会接受这个作为答案。谁面临这个问题,他们也可以尝试这个。
编辑:
ConnectivityMode.Https只是在可用的服务总线3中。由于Signalr上的issue,我必须使用servicebus 2。因此,我无法应用此解决方案。
答案 1 :(得分:1)
我相信必须缺少证书。
从此堆栈溢出帖子https://stackoverflow.com/a/24224550/4735373这里有一个可能有用的链接:https://corp.sts.microsoft.com/Onboard/ADFSOnboard.htm#Corp-STS-Certificates