青空の月

PHP, Unity, C#, アプリ開発関連について。

TlsExceptionを解消

HttpWebRequestを使用している箇所でこんなエラーが出る時があったので、その解消法をメモ。

 

Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server. Error code: 0xffffffff80092012
  at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection certificates) [0x00000] in :0 
  at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1 () [0x00000] in :0 
  at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process () [0x00000] in :0 
  at (wrapper remoting-invoke-with-check) Mono.Security.Protocol.Tls.Handshake.HandshakeMessage:Process ()
  at Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage (Mono.Security.Protocol.Tls.TlsStream handMsg) [0x00000] in :0 
  at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in :0 
  
  

 

証明書が問題みたい。

mozrootsとかいうのを使えばいいみたいに書いてあるトコもあったけど、mozrootsでも直らなかった。

 

HttpWebRequestを使う前にSystem.Net.ServicePointManager.CertificatePolicyを更新するといいらしいので試してみた。

とりあえずこんなClassを用意してみた。

 

 

こんな感じに使用してみたらエラーが出なくなった。

System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
HttpWebRequest authRequest = WebRequest.Create(clientLoginHandler) as HttpWebRequest;

 

 

 

 

参考

http://stackoverflow.com/questions/7306860/aws-s3-net-sdk