2011-09-05 5 views
4

J'utilise Unity3D et j'ai essayé d'utiliser le SDK S3 .NET. Mais continuer à obtenir en dessous de l'erreur: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() 

Mon code javascript:

function Start() 
{ 
    client = Amazon.AWSClientFactory.CreateAmazonS3Client(Conf.AWSAccessKey, Conf.AWSSecretKey); 

    var response : ListBucketsResponse = client.ListBuckets(); 
} 

J'ai cherché une journée entière et probablement trouvé la raison:

Il se trouve que Mono installe sans certs racine Par défaut, Mono refuse de faire confiance aux services Web protégés par SSL. The Mono Security FAQ a quelques suggestions sur la façon de traiter la question «

J'ai essayé ci-dessous les méthodes.

  1. Reference

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

    Quand je lance am1.exe compilé, il me donne un beaucoup d'erreurs d'exception

  2. Utilisez l'outil mozroots.exe pour télécharger et installer tous les certificats racine de Mozilla. Bien que la sortie indique que les certificats ont été importés avec succès. Mais en Unity3D il demande encore « certificat non valide reçu du serveur »

Je travaille sur ce toute la journée et ne peut pas l'obtenir résolu, espère que quelqu'un peut me aider.

Répondre

1

0x80092012 se produit lorsque le certificat n'a pas pu être vérifié pour révocation.

Depuis la version 2.8, Mono par défaut X509RevocationMode.NoCheck à moins que la variable d'environnement de MONO_X509_REVOCATION_MODE est défini (dans ce cas, il vérifiera les CRLs à l'intérieur des magasins de certificats).

Je ne sais pas dans quelle mesure votre version d'Unity3D par rapport à Mono est récente. Cependant, vous devriez pouvoir utiliser ICertificatePolicy ou ServicePointManager.ServerCertificateValidationCallback pour contourner ce problème. Il suffit de ne pas tenir compte du code d'erreur 0x80092012 s'il provient d'un certificat émis pour Amazon.

+0

quelle est la première version qui inc ludes ceci? – knocte

+0

@knocte Je ne me souviens pas, mais c'était avant septembre 2011 ;-) Pour le trouver, vous devrez suivre le changement sur github (quand 'MONO_X509_REVOCATION_MODE' a été introduit) et vérifier les branches de publication qui contiennent ce commit. – poupou

+0

merci, https://github.com/mono/mono/commit/231f4decce353eb21f4eaf0d6ed0ee7b1ef6268b donc 2.8 inclut cette – knocte

0
public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy 
{ 
    public TrustAllCertificatePolicy() {} 
    public bool CheckValidationResult(ServicePoint sp, 
     X509Certificate cert, 
     WebRequest req, 
     int problem) 
    { 
     return true; 
    } 
} 

Donc avant d'établir une connexion HTTPS (via WebRequest, WebServices ou autre) au serveur distant il suffit d'appeler:

System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy(); 

Profitez

0

Si vous utilisez ASP pour en mono, vous avez besoin téléchargez et installez les certificats racine de Mozilla avec l'utilisateur www-data

chown www-data /var/www/ 
sudo -u www-data mozroots --import --sync 
Questions connexes