Android 용 Mono에서 WebRequests를 사용 중이며 일부 서버의 경우 인증서 유효성 검사가 실패합니다. ICertificatePolicy
을 구현했습니다 (ServerCertificateValidationCallback
이 호출되지 않았으므로 안드로이드 용 Mono의 문제 일까?). 사용자가 앱 설정에서 모든 인증서를 허용 한 경우 true를 반환합니다. 사용자가이 설정을 사용 중지하면 유효성 검사에 문제가있을 경우 false
가 표시됩니다. 이 경우 사용자에게 인증서 유효성 검사 문제가 발생했음을 알리는 메시지를 표시하고 싶습니다.WebException에서 인증서 유효성 검사 오류 확인
는 Problem SSL Certificate C#에 따르면, 나는
catch (WebException we)
{ // If SSL throws exception that will be handled here
if (we.Status == WebExceptionStatus.TrustFailure)
throw new Exception("some nice message");
}
같은 catch 블록을 구현하지만이 상태가 SendFailure로 설정되어 있기 때문에 쓸모없는 것으로 밝혀졌습니다. 예외로 인해 유효성 검사가 실패했다는 것을 어떻게 알 수 있습니까? InnerException
을 통해 http://msdn.microsoft.com/en-us/library/system.net.icertificatepolicy(v=vs.110).aspx에 나열된 코드 중 하나인지 확인하려면 TlsException
을 찾아야합니까?
더 좋은 해결책이 있습니까? 내가 찾은
System.Net.WebException: Error getting response stream (Write: The authentication or decryption has failed.): SendFailure ---> System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server. Error code: 0xffffffff800b010a
D/KP2A (17517): at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.RemoteValidation (Mono.Security.Protocol.Tls.ClientContext context, AlertDescription description) [0x00000] in <filename unknown>:0
D/KP2A (17517): at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection certificates) [0x00000] in <filename unknown>:0
D/KP2A (17517): at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1() [0x00000] in <filename unknown>:0
D/KP2A (17517): at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process() [0x00000] in <filename unknown>:0
D/KP2A (17517): at Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage (Mono.Security.Protocol.Tls.TlsStream handMsg) [0x00000] in <filename unknown>:0
D/KP2A (17517): at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
D/KP2A (17517): --- End of inner exception stack trace ---
D/KP2A (17517): at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
D/KP2A (17517): --- End of inner exception stack trace ---
D/KP2A (17517): at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
D/KP2A (17517): at System.Net.HttpWebRequest.GetResponse() [0x00000] in <filename unknown>:0
D/KP2A (17517): at System.Net.WebClient.GetWebResponse (System.Net.WebRequest request) [0x00000] in <filename unknown>:0
D/KP2A (17517): at System.Net.WebClient.OpenRead (System.Uri address) [0x00000] in <filename unknown>:0