本地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
相关产品推荐
相关产品推荐

