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

tim*_*mje 7 azure azureservicebus

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

// this ensures that HTTP is used instead of TCP sockets.
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Http;
Run Code Online (Sandbox Code Playgroud)

以上设置确保不尝试TCP套接字,但我无法找到任何方法来确保在设置HTTPS(SSL)失败时不使用HTTP回退.

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

消息传递实体期望以形状传递URI

 Endpoint=sb://somenamespace.servicebus.windows.net/; ...
Run Code Online (Sandbox Code Playgroud)

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


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

var ns = NamespaceManager.CreateFromConnectionString(
  "Endpoint=https://somenamespace.servicebus.windows.net/;..."
);
Run Code Online (Sandbox Code Playgroud)

更新#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
Run Code Online (Sandbox Code Playgroud)

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

tim*_*mje 7

根据在Azure几个演示[ 1,2 ]:

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

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

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

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