简体   繁体   English

Xamarin.Forms PCL javax.net.ssl.SSLHandshakeException

[英]Xamarin.Forms PCL javax.net.ssl.SSLHandshakeException

I'm working on a Xamarin.Forms PCL project and i'm trying to send a request to REST API located on an intranet SSL server. 我正在研究Xamarin.Forms PCL项目,并且正在尝试向位于Intranet SSL服务器上的REST API发送请求。 The intranet server is using a self signed certificate. Intranet服务器正在使用自签名证书。 I've been testing this on the Android project but i'm getting the following error: 我已经在Android项目上对此进行了测试,但出现以下错误:

11-30 19:59:10.645 E/mono-rt ( 4180): [ERROR] FATAL UNHANDLED EXCEPTION: Javax.Net.Ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 11-30 19:59:10.645 E / mono-rt(4180):[错误]致命异常:Javax.Net.Ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。 ---> Java.Security.Cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. ---> Java.Security.Cert.CertificateException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。 ---> Java.Security.Cert.CertPathValidatorException: Trust anchor for certification path not found. ---> Java.Security.Cert.CertPathValidatorException:找不到证书路径的信任锚。 11-30 19:59:10.645 E/mono-rt ( 4180): --- End of inner exception stack trace --- 11-30 19:59:10.645 E/mono-rt ( 4180): --- End of inner exception stack trace --- 11-30 19:59:10.645 E/mono-rt ( 4180): --- End of managed Javax.Net.Ssl.SSLHandshakeException stack trace --- 11-30 19:59:10.645 E/mono-rt ( 4180): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 11-30 19:59:10.645 E / mono-rt(4180):-内部异常堆栈跟踪的结尾--11-30 19:59:10.645 E / mono-rt(4180):--- End内部异常堆栈跟踪--11-30 19:59:10.645 E / mono-rt(4180):-托管Javax.Net.Ssl.SSLHandshakeException堆栈跟踪结束-11-30 19:59: 10.645 E / mono-rt(4180):javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:361) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.Connection.upgradeToTls(Connection.java:242) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.Connection.connect(Connection.java:159) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:175) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:120) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:330) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:319) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:241) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.Call.getResponse(C 11-30 19:59:10.645 E / mono-rt(4180):在com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:361)11-30 19:59:10.645 E / mono-rt( 4180):在com.squareup.okhttp.Connection.upgradeToTls(Connection.java:242)11-30 19:59:10.645 E / mono-rt(4180):在com.squareup.okhttp.Connection.connect(Connection。 java:159)11-30 19:59:10.645 E / mono-rt(4180):在com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:175)11-30 19:59:10.645 E / mono- rt(4180):at com.squareup.okhttp.OkHttpClient $ 1.connectAndSetOwner(OkHttpClient.java:120)11-30 19:59:10.645 E / mono-rt(4180):at com.squareup.okhttp.internal.http .HttpEngine.nextConnection(HttpEngine.java:330)11-30 19:59:10.645 E / mono-rt(4180):在com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:319)11 -30 19:59:10.645 E / mono-rt(4180):在com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)11-30 19:59:10.645 E / mono-rt (4180):位于com.squareup.okhttp.Call.getResponse(C all.java:271) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:228) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:199) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.Call.access$100(Call.java:34) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:162) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33) 11-30 19:59:10.645 E/mono-rt ( 4180): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 11-30 19:59:10.645 E/mono-rt ( 4180): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 11-30 19:59:10.645 E/mono-rt ( 4180): at java.lang.Thread.run(Thread.java:761) 11-30 19:59:10.645 E/mono-rt ( 4180): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorExceptio all.java:271)11-30 19:59:10.645 E / mono-rt(4180):在com.squareup.okhttp.Call $ ApplicationInterceptorChain.proceed(Call.java:228)11-30 19:59:10.645 E / mono-rt(4180):在com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:199)11-30 19:59:10.645 E / mono-rt(4180):在com.squareup.okhttp Call.access $ 100(Call.java:34)11-30 19:59:10.645 E / mono-rt(4180):在com.squareup.okhttp.Call $ AsyncCall.execute(Call.java:162)11-30 19:59:10.645 E / mono-rt(4180):at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)11-30 19:59:10.645 E / mono-rt(4180):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)11-30 19:59:10.645 E / mono-rt(4180):在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java :607)11-30 19:59:10.645 E / mono-rt(4180):位于java.lang.Thread.run(Thread.java:761)11-30 19:59:10.645 E / mono-rt(4180 ):由以下原因引起:java.security.cert.CertificateException:java.security.cert.CertPathValidatorExceptio n: Trust anchor for certification path not found. n:找不到证书路径的信任锚。 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:563) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:444) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:401) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:375) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:304) 11-30 19:59:10.645 E/mono-rt ( 4180): at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94) 11-30 19:59:10.645 E/mono-rt ( 4180): at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.Platform. 11-30 19:59:10.645 E / mono-rt(4180):在com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:563)11-30 19:59:10.645 E / mono-rt( 4180):位于com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:444)11-30 19:59:10.645 E / mono-rt(4180):位于com.android.org.conscrypt.TrustManagerImpl。 checkTrusted(TrustManagerImpl.java:401)11-30 19:59:10.645 E / mono-rt(4180):在com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:375)11-30 19:59 :10.645 E / mono-rt(4180):在com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:304)11-30 19:59:10.645 E / mono-rt(4180):在android。 security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94)11-30 19:59:10.645 E / mono-rt(4180):在android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java: 88)11-30 19:59:10.645 E / mono-rt(4180):位于com.android.org.conscrypt.Platform。 checkServerTrusted(Platform.java:178) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:596) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 11-30 19:59:10.645 E/mono-rt ( 4180): at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357) 11-30 19:59:10.645 E/mono-rt ( 4180): ... 16 more 11-30 19:59:10.645 E/mono-rt ( 4180): Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. checkServerTrusted(Platform.java:178)11-30 19:59:10.645 E / mono-rt(4180):在com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:596)11-30 19:59 :10.645 E / mono-rt(4180):在com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(本机方法)11-30 19:59:10.645 E / mono-rt(4180):在com.android.org .conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357)11-30 19:59:10.645 E / mono-rt(4180):...还有16个11-30 19:59:10.645 E / mono-rt(4180 ):由以下原因引起:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。 11-30 19:59:10.645 E/mono-rt ( 4180): ... 27 more 11-30 19:59:10.645 E / mono-rt(4180):...还有27个

How should i fix this? 我该如何解决?

try this, it will override self signed ssl certs. 试试这个,它将覆盖自签名的ssl证书。 pop this in your android OnCreate() method. 在您的android OnCreate()方法中弹出它。

System.Net.ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) =>
{
    if (cert != null) System.Diagnostics.Debug.WriteLine(cert);
    return true;
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM