Azure Service总线 - 队列连接错误

时间:2016-10-06 03:04:35

标签: azure message-queue

我正在尝试使用以下代码连接并向azure服务总线队列发送消息

var connectionString = "<Your connection string>";

var queueName = "<Your queue name>";

var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
var message = new BrokeredMessage("This is a test message!");
client.Send(message);

这与他们在网站上的代码相同。

但是在连接时,它会给SSPI ERROR一个内部异常&#39;客户端和服务器不具备通用算法&#39;。

另外,我在系统中禁用了TLS 1.0和SSL 3.0。是因为这个。

有人可以帮我理解这里有什么问题吗?

2 个答案:

答案 0 :(得分:0)

  

客户端和服务器不具备通用算法

这不是TCP层问题。这在TLS握手中更高,这意味着就是这样。双方(客户端和服务器)无法就通用密码套件达成一致,并且握手失败。

通过SSLLab的浏览器测试运行客户端的主机(即使它不是浏览器): https://www.ssllabs.com/ssltest/viewMyClient.html

然后通过服务器测试页面运行Service Bus端点:
https://www.ssllabs.com/ssltest/

比较结果并在客户端中启用至少一个密码套件,该密码套件与Service Bus端点上的TLS堆栈相匹配。

您还应该尝试:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

..因为你已经禁用了TLS 1.0而且我不再确定你的.NET now defaults to,所以明确设置协议版本是自然的方式。

TLS 1.2发布back in 2008。您可以确定Azure支持全球所有服务 - check your own Service Bus namespace here! (同样的故事为935x / TCP)。

仅支持TLS 1.2是不够的,您的主机必须至少有一个带服务器的通用密码套件 - 使用它来检查您的主机:

https://github.com/snobu/get-schannel-ciphers(/ Release /下的.exe)

答案 1 :(得分:0)

我们在禁用TLS 1.0和1.1时遇到了完全相同的问题(我们使用https://docs.nwebsec.com/projects/AzureStartupTasks/en/latest/并添加了

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
在Application_Start下的Global.asax中的

我们使用Microsoft支持打开了一张票,发现Azure Service Bus需要升级到.Net Framework 4.6.2才能支持TLS 1.1和TLS 1.2。以下是详细信息:

Service Bus依赖底层SSLStream类进行NetEventRealyBinding的安全通信。

在.Net Framework 4.5.2中包含的WCF中,SSLStream仅支持SSL 3.0和TLS 1.0。

.Net Framework 4.6.2中的WCF版本支持SSLStream的TLS 1.1和TLS 1.2。

需要更新服务总线服务以使用.Net Framework 4.6.2。目前,Service Bus使用具有.Net Framework 4.5.2的OSFamily 4 https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-guestos-update-matrix#family-4-releases。目前计划升级到.Net Framework的计划将于2017年中期完成。

一旦我从微软那里听到更多回复,我就会更新这个答案。

更新2017-03-21:

Microsoft发送了此解决方法,修复了该问题并允许我们的代码与TLS 1.2一起使用。

  1. 在当前用于设置TLS 1.2的PowerShell脚本中,添加以下行。在.Net Framework 4.5.2上,这将强制SslStreams使用Tls 1.0 / 1.1 / 1.2。但由于您的机器仅允许TLS 1.2,因此将使用。

    UpdateRegistryKey "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" "SchUseStrongCrypto" 1 "DWORD"          
    
  2. 在您启动代码时添加以下行,然后重建并重新测试

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Https;