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

本地C#连接Azure Key Vault遇SSL连接错误,需读取Blob存储连接字符串

Azure Key Vault SSL连接错误排查与修复方案

错误信息

无法建立SSL连接,详见内部异常。'SocketException: 主机机器中的软件中止了一个已建立的连接。

问题场景

本地机器通过C#代码读取Azure Key Vault中存储的Blob存储连接字符串时,触发上述SSL连接错误,当前使用的代码如下:

public static async Task PrivacyAsync()
{
        string Client_Id = "xxxxxxxx";
        string Client_Secret = "xxxxxx";
        var kvUri = "xxxx";

        var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(
            async (string auth, string res, string scope) =>
            {
                var authcontext = new AuthenticationContext(auth);
                var credential = new ClientCredential(Client_Id, Client_Secret);
                AuthenticationResult result = await authcontext.AcquireTokenAsync(res, credential);

                if (res == null)
                {
                    throw new InvalidOperationException("token failed");

                   
                }
                return result.AccessToken;
            }
            ));

        var secret = await client.GetSecretAsync(kvUri, "xxxxxx");
        Console.WriteLine("secret success full read"+secret.Value);
        Console.ReadLine();
    
        //var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
        //await client.SetSecretAsync("test0311", "hello");
        
}

修复方案

1. 排查网络拦截问题

本地防火墙、代理软件可能会拦截SSL连接,先尝试关闭代理或临时禁用防火墙测试。如果必须使用代理,需为代码底层的HttpClient配置代理参数,确保请求能正常穿透代理到达Azure服务。

2. 升级到新版Azure SDK

当前代码使用的KeyVaultClient属于旧版SDK,已被官方弃用,建议改用Azure.Security.KeyVault.Secrets包中的SecretClient,新版SDK对SSL连接的处理更稳定,且支持更安全的认证方式。修改后的示例代码:

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using System;
using System.Threading.Tasks;

public static async Task PrivacyAsync()
{
    string clientId = "xxxxxxxx";
    string clientSecret = "xxxxxx";
    string tenantId = "your-tenant-id"; // 补充你的Azure AD租户ID
    var kvUri = "https://your-keyvault-name.vault.azure.net/"; // 确保是完整HTTPS格式

    // 使用ClientSecretCredential完成认证
    var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
    var client = new SecretClient(new Uri(kvUri), credential);

    var secret = await client.GetSecretAsync("your-secret-name"); // 替换为目标密钥名称
    Console.WriteLine($"成功读取连接字符串:{secret.Value.Value}");
    Console.ReadLine();
}

注意安装Azure.Security.KeyVault.Secrets和Azure.Identity两个NuGet包。

3. 验证端点与SSL证书

  • 确认kvUri是完整的HTTPS格式(如https://xxx.vault.azure.net/),缺少HTTPS前缀会导致SSL连接失败;
  • 在本地浏览器中访问Key Vault的端点,检查是否能正常加载且无SSL证书报错,若证书异常需更新本地根证书库。

4. 检查Azure AD应用权限

确保用于认证的Client ID对应的Azure AD应用,已被授予Key Vault的Secrets Reader或Secrets User权限,且权限已完成生效(权限变更可能需要等待1-5分钟)。

内容的提问来源于stack exchange,提问作者Taraka Rajesh Uppu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:20