繁体   English   中英

Xamarin.Forms PCL javax.net.ssl.SSLHandshakeException

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

我正在研究Xamarin.Forms PCL项目,并且正在尝试向位于Intranet SSL服务器上的REST API发送请求。 Intranet服务器正在使用自签名证书。 我已经在Android项目上对此进行了测试,但出现以下错误:

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:找不到证书路径的信任锚。 ---> Java.Security.Cert.CertPathValidatorException:找不到证书路径的信任锚。 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):在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):在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:找不到证书路径的信任锚。 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):在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个

我该如何解决?

试试这个,它将覆盖自签名的ssl证书。 在您的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