IT干货网

ssl之AWS S3.NET 开发工具包

over140 2023年11月29日 编程设计 12 0

我正在使用 Unity3D,并尝试使用 S3 .NET SDK。但一直低于错误:

TlsException: Invalid certificate received from server. Error code: 0xffffffff80092012 
Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection certificates) 
Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1 () 

我的 javascript 代码:

function Start() 
{ 
    client = Amazon.AWSClientFactory.CreateAmazonS3Client(Conf.AWSAccessKey, Conf.AWSSecretKey); 
 
    var response : ListBucketsResponse = client.ListBuckets(); 
} 

找了一整天,大概找到原因了:

事实证明,Mono 安装时没有根证书,因此默认情况下,Mono 拒绝信任任何受 SSL 保护的 Web 服务。 The Mono Security FAQ对如何处理这个问题有一些建议。”

我试过以下方法:

  1. Reference

    mcs am1.cs 
     
    mono am1.exe https://www.amazonaws.com 
    

    当我运行编译后的 am1.exe 时,它​​给了我很多异常错误

  2. 使用 mozroots.exe 工具下载并安装所有 Mozilla 的根证书。

    C:\Program Files (x86)\Mono-2.6.7\lib\mono\1.0>mozroots --import --machine --sync 
    

    尽管输出显示证书已成功导入。但是在Unity3D中还是提示“Invalid certificate received from server”

我整天都在研究这个问题,但无法解决,希望有人能帮助我。

请您参考如下方法:

0x80092012 发生在无法验证吊销证书时。

从 2.8 版开始,Mono 将默认为 X509RevocationMode.NoCheck,除非设置了 MONO_X509_REVOCATION_MODE 环境变量(在这种情况下,它将检查证书存储区内的 CRL)。

我不知道你的 Unity3D wrt Mono 版本有多新。但是你应该能够使用 ICertificatePolicyServicePointManager.ServerCertificateValidationCallback解决此问题。如果 0x80092012 错误代码来自颁发给 Amazon 的证书,请忽略它。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!