【问题标题】:Azure Storage Blob Put SSL handshake errorAzure 存储 Blob 放置 SSL 握手错误
【发布时间】:2018-06-08 13:55:39
【问题描述】:

我有一个格式正确的 Blob PUT 操作 URL,使用共享访问签名:

http://xyz.blob.core.windows.net:80/container/BLOB_NAME?sv=2015-04-05&sr=b&sig=xtpL3M2WRWILarpojLnjlacpIWs41%2BosFWiTtAPGwIE%3D&se=2016-03-07T06%3A00%3A59Z&sp=w

使用 Fiddler 的 Composer,我能够成功上传数据(带有“x-ms-blob-type: BlockBlob”标头)。

但是,当我将 URL 更改为“https”时,PUT 失败并显示状态码 502,并显示以下消息:

[Fiddler] 与“xyz.blob.core.windows.net”的连接失败。
System.Security.SecurityException 无法与 server.fiddler.network.https 协商 HTTPS 连接> 与 xyz.blob.core.windows.net 的 HTTPS 握手(对于 #21)失败。 System.IO.IOException 由于意外的数据包格式,握手失败。

这似乎是 Azure 端的一个问题。我该如何解决这个问题?

附:在 Chrome 中,此问题表现为“net::ERR_SSL_PROTOCOL_ERROR”。在 Edge 中,我收到“XMLHttpRequest:网络错误 0x80070005,访问被拒绝。”

【问题讨论】:

  • 请在使用 Fiddler 时看看这是否解决了问题:telerik.com/forums/io-exception-unexpected-packet-format#
  • 将协议更改为“;ssl2;ssl3;tls1.0;tls1.1;tls1.2”后,错误变为: System.Security.SecurityException 无法与服务器协商 HTTPS 连接。 fiddler.network.https>与 xyz.blob.core.windows.net(对于 #54)的 HTTPS 握手失败。 System.ComponentModel.Win32Exception 客户端和服务器无法通信,因为它们没有共同的算法
  • ...并且使用 Protocols == "tls1.0;tls1.1;tls1.2",错误与原始问题相同:“由于意外的数据包格式,握手失败"

标签: azure ssl azure-storage azure-blob-storage


【解决方案1】:

哇! URL 中的显式端口(HTTP 的“:80”)是问题所在。

【讨论】:

    【解决方案2】:

    还有一点。只需确保在使用 SAS 创建 blob 服务时,在主机参数中不提供协议信息。例如

    var service = azureBlob.createBlobServiceWithSas("xxxxx.blob.core.windows.net", sasKey);

    【讨论】:

      猜你喜欢
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2016-08-08
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多