AWS S3 .NET SDK
问题描述:
我正在使用Unity3D,并尝试使用S3 .NET SDK。但不断收到以下错误:AWS 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拒绝信任任何受SSL保护的Web服务。 The Mono Security FAQ对如何处理这一问题的夫妇建议“
我曾尝试以下方法:
-
mcs am1.cs mono am1.exe https://www.amazonaws.com
当我运行编译am1.exe,它给了我一个很多异常错误
-
使用mozroots.exe工具下载并安装所有Mozilla的根证书。
C:\Program Files (x86)\Mono-2.6.7\lib\mono\1.0>mozroots --import --machine --sync
尽管输出表示证书已成功导入。但在Unity3D仍然提示
“从服务器接收证书无效”我一直在这个整天,不能把它解决了,希望有人能帮助我。
答
0x80092012发生在证书无法验证撤销时。
自从2.8版本,单声道将默认为X509RevocationMode.NoCheck除非MONO_X509_REVOCATION_MODE环境变量设置(在这种情况下,它会检查证书存储区中的CRL)。
我不知道你的Unity3D版本和单声道本身有多近。但是,您应该能够使用ICertificatePolicy或ServicePointManager.ServerCertificateValidationCallback来解决此问题。如果它来自颁发给亚马逊的证书,则简单忽略0x80092012错误代码。
答
public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
{
public TrustAllCertificatePolicy() {}
public bool CheckValidationResult(ServicePoint sp,
X509Certificate cert,
WebRequest req,
int problem)
{
return true;
}
}
所以建立HTTPS连接(通过WebRequest的,Web服务或其他)到远程服务器只需要调用之前:
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
如果在单声道使用ASP的享受
答
,你需要下载并安装Mozilla的根证书与用户万维网数据
chown www-data /var/www/
sudo -u www-data mozroots --import --sync
什么是第一个版本,公司鲁德斯呢? – knocte
@knocte我不记得了,但它在2011年9月之前;-)要找到它,你需要跟踪github上的变化(当引入'MONO_X509_REVOCATION_MODE'时)并检查包含该提交的发布分支。 – poupou
谢谢,https://github.com/mono/mono/commit/231f4decce353eb21f4eaf0d6ed0ee7b1ef6268b所以2.8包括这个 – knocte