确保azure服务总线通过HTTPS连接,而不是HTTP连接

时间:2014-03-20 17:50:16

标签: azure azureservicebus

我想找到一种方法来确保我的自托管Web服务通过HTTPS连接到Azure Service Bus(主题和队列) - 我不希望它们回退到HTTP。

// this ensures that HTTP is used instead of TCP sockets.
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Http;

以上设置可确保未尝试使用TCP套接字,但我找不到任何方法来确保在无法设置HTTPS(SSL)的情况下不使用HTTP回退。

我的代理阻止fiddler与服务总线很好地协作,所以当我调出fiddler时,它只会记录从我的服务器发出的一堆(未加密的)HTTP流量 - 显然这与我想要的相反。

消息传递实体希望以

的形式传递URI
 Endpoint=sb://somenamespace.servicebus.windows.net/; ...

这阻止我指定 https:// .... 。有没有人知道如何以及在哪里可以禁止Service Bus使用未加密的通信?


有趣的是(不一致?),命名空间管理器似乎并不介意使用带有https的URL ...

var ns = NamespaceManager.CreateFromConnectionString(
  "Endpoint=https://somenamespace.servicebus.windows.net/;..."
);

更新#1:启动wireshark,看起来通信是通过端口80.它使用http 1.1流,这解释了为什么fiddler和代理没有很好地发挥作用。握手发生在azure在201响应中发送webstream地址,然后TCP数据包开始通过端口80传递,包括清除信息,如下所示:

*sb://somenamespace.servicebus.windows.net:80/....application/ssl-tls
...
(later on)
... 
http://www.microsoft.com/pki/mscorp/MSIT%20Machine%20Auth%20CA%202(1).crt

这让我强烈怀疑TLS流量是通过端口80发送的 - 尽管我希望有人能够确认这一点。

1 个答案:

答案 0 :(得分:7)

根据Azure上的一些演示[12]:

如果TCP端口9350-9353被阻止:

  • 监听器通过出站HTTP(端口80)监听。 "在一对HTTP请求上形成覆盖TLS / SSL的TCP等效隧道。"

  • 发件人通过出站HTTPS(端口443)发送。

这符合我对wireshark的观察。对于代理消息传递,Azure Service Bus没有非加密回退,即使它回退到端口80,通信仍然通过TLS / SSL加密。