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

使用C#调用AWS Transcribe接口遇认证失败问题求助

解决C#调用AWS Transcribe接口时的传输流关闭认证失败问题

哥们,我之前踩过一模一样的坑!这种情况90%都是TLS版本兼容问题导致的——AWS现在强制要求使用TLS 1.2及以上版本,但老版本的.NET框架或AWS SDK默认可能没启用这个协议,而CLI和Python的请求自动适配了最新标准。给你几个一步步的解决办法:

1. 强制代码启用TLS 1.2

在创建Transcribe客户端之前,先添加一行代码强制指定TLS版本,这是最快的临时修复方案:

// 放在代码最开头,比如Main方法或者客户端初始化前
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

如果你的项目用的是.NET 4.7及以上版本,也可以不用硬编码,设置成让系统自动选择最优协议:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

2. 更新AWS SDK for .NET到最新版

旧版本的AWS SDK可能对AWS的TLS要求支持不完善,直接通过NuGet包管理器更新Amazon.TranscribeService包到最新版本,或者更新整个AWS SDK集合包,确保SDK能正确处理新的安全协议。

3. 改用AWS默认凭证链(避免硬编码密钥)

你现在硬编码密钥的方式不仅不安全,还可能因为字符转义、空格等隐性问题导致认证失败。试试和CLI/Python一样用默认凭证链,SDK会自动读取环境变量、~/.aws/credentials文件或者IAM角色凭证:

// 不用传密钥,SDK自动找凭证
AmazonTranscribeServiceClient client = new AmazonTranscribeServiceClient(RegionEndpoint.USEast1);

这样能排除密钥输入错误的可能,也更符合AWS的最佳实践。

4. 检查系统级TLS配置(终极方案)

如果上面的方法都不行,可能是系统本身禁用了TLS 1.2。可以通过修改注册表强制.NET框架使用强加密:

  • 打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319
  • 添加一个DWORD值,命名为SchUseStrongCrypto,设置值为1
  • 如果你用的是32位程序,还要在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319下添加同样的键值
  • 修改后重启电脑生效

完整测试代码示例

using System;
using System.Net;
using Amazon.TranscribeService;
using Amazon.TranscribeService.Model;

namespace TranscribeTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // 强制启用TLS 1.2
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            
            try
            {
                // 使用默认凭证链初始化客户端
                var client = new AmazonTranscribeServiceClient(RegionEndpoint.USEast1);
                
                // 测试ListTranscriptionJobs接口
                var listRequest = new ListTranscriptionJobsRequest();
                var listResponse = client.ListTranscriptionJobs(listRequest);
                
                Console.WriteLine($"成功获取到 {listResponse.TranscriptionJobs.Count} 个转录任务");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"错误详情:{ex.Message}\n{ex.InnerException?.Message}");
            }
            
            Console.ReadLine();
        }
    }
}

先试试前两个方法,基本就能解决问题了——我当时就是更新SDK加TLS强制设置搞定的。

内容的提问来源于stack exchange,提问作者Nikhil Agrawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:12:08