You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Microsoft.WindowsAzure.Storage迁移至Azure TLS 1.2的方法

.NET Framework 4.5下Azure存储Blob下载适配TLS 1.2的解决方案

问题背景

基于.NET Framework 4.5的应用,使用Microsoft.WindowsAzure.Storage命名空间的API下载Azure Blob存储中的图片。当环境TLS协议升级至1.2后,该下载方法无法正常工作(推测因异常触发catch逻辑返回null),回退到TLS1.0后恢复正常。需明确是否需要更新组件引用或添加安全配置来适配TLS1.2。

核心解决方案

1. 升级Microsoft.WindowsAzure.Storage NuGet包

旧版本的Microsoft.WindowsAzure.Storage库对TLS1.2的支持不完善,需升级至8.7.0及以上版本(该版本开始全面支持TLS1.2)。通过NuGet包管理器搜索并更新至兼容.NET Framework 4.5的最高稳定版本(旧版库最终稳定版为9.3.3)。

2. 强制启用TLS 1.2协议

.NET Framework 4.5默认未将TLS1.2设为默认安全协议,需在代码中显式指定:
在创建CloudBlobClient之前添加以下代码(需引用System.Net命名空间):

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

3. 可选:通过配置文件全局启用TLS1.2

若不想修改代码,可在应用的app.config或web.config中添加以下配置,全局强制应用使用TLS1.2:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/>
  </runtime>
</configuration>

修改后的示例代码

using System.Net;
using System.IO;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

public static MemoryStream DownloadBlob_AsMemStreamTemp(string blobFilePath)
{
    try
    {
        // 强制启用TLS 1.2
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        string blobStorageConnectionString = "DefaultEndpointsProtocol=https;AccountName=MyAccount;AccountKey=[key];EndpointSuffix=core.windows.net";

        CloudStorageAccount blobStorageAccount = CloudStorageAccount.Parse(blobStorageConnectionString);
        CloudBlobClient blobClient = blobStorageAccount.CreateCloudBlobClient();
        CloudBlobContainer containerReference = blobClient.GetContainerReference("MyContainer");                
        containerReference.CreateIfNotExists();
        
        CloudBlockBlob blob = containerReference.GetBlockBlobReference(blobFilePath);

        MemoryStream ms = new MemoryStream();
        blob.DownloadToStream(ms);
        // 重置流指针到起始位置,避免调用方读取时无数据
        ms.Position = 0;
        return ms;
    }
    catch (Exception ex)
    {
        // 建议添加日志记录,便于排查问题
        // Logger.Error("下载Blob失败", ex);
        return null;
    }
}

额外说明

  • 升级NuGet包后需确认Azure存储账户已禁用TLS1.0/1.1(当前Azure存储已强制要求TLS1.2及以上)。
  • 原代码中CloudBlobContainer blobContainer = containerReference;为冗余代码,可直接使用containerReference调用后续方法。
  • 下载完成后重置MemoryStream的Position为0,避免调用方读取流时因指针在末尾导致无数据。

内容的提问来源于stack exchange,提问作者E. A. Bagby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:27:36