android https 证书过期变更,使用自定义证书的Android https连接

我想使用位于p12包中的自定义证书进行https连接。我已经在iPhone上做过了(所以我可以验证,证书,服务器等一切正常),但是在Android上遇到了一些问题。使用自定义证书的Android https连接

12-13 12:32:44.545:W/System.err的(4407): javax.net.ssl中.SSLHandshakeException: java.security.cert.CertPathValidatorException:未找到 证书路径的信任锚点。 12-13 12:32:44.545:W/System.err(4407): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:374) 12-13 12:32 :44.545:W/System.err(4407):at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:209) 12-13 12:32:44.545:W/System.err(4407):at libcore.net.http.HttpsURLConnectionImpl $ HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478) 12-13 12:32:44.545:W/System.err的(4407):在 libcore.net.http.HttpsURLConnectionImpl $ HttpsEngine。连接(HttpsURLConnectionImpl.java:433) 12-13 12:32:44.545:W/System.err(4407):at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 12-13 12:32:44.550:W/System.err(4407):at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)12-13 12:32:44.550:W/System .err(4407):at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 12-13 12:32:44.550:W/System.err(4407):at libcore.net.http .HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165) 12-13 12:32:44.550:W/System.err(4407):at com.geckolab.httptestandroid.MainActivity.downloadUrlHttps(MainActivity.java:172) 12 -13 12:32:44.550:W/System.err(4407):at com.geckolab.httptestandroid.MainActivity.access $ 0(MainActivity.java:151) 12-13 12:32:44.550:W/System。 err(4407):at com.geck olab.httptestandroid.MainActivity $ DownloadWebPageTextHttps.doInBackground(MainActivity.java:99) 12-13 12:32:44.550:W/System.err(4407):at com.geckolab.httptestandroid.MainActivity $ DownloadWebPageTextHttps.doInBackground(MainActivity .java:1) 12-13 12:32:44.550:W/System.err(4407):at android.os.AsyncTask $ 2.call(AsyncTask.java:287)12-13 12:32:44.550: W/System.err(4407):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305) 12-13 12:32:44.555:W/System.err(4407):at java.util.concurrent.FutureTask.run(FutureTask.java:137)12-13 12:32:44.555:W/System.err(4407):at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask .java:230)12-13 12:32:44.555:W/System.err(4407):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 12-13 12:32:44.555:W/System.err( 4407):在 java.util.concurrent.ThreadPoolExecutor中$ Worker.run(ThreadPoolExecutor.java:569) 12-13 12:32:44.555:W/System.err的(4407):在 java.lang.Thread中。运行(Thread.java:856)12-13 12:32:44.555: W/System.err(4407):导致者: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException:Trust anchor找不到 认证路径。 12-13 12:32:44.560:W/System.err(4407): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl。(TrustManagerImpl.java:192) 12-13 12:32:44.560:W/System.err ) 12-13 12:32:44.560:W/System.err(4407):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:573) 12-13 12: 32:44.560:W/System.err(4407):at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)12-13 12:32:44.560:W/System.err( 4407):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371) 12-13 12:32:44.560:W/System.err(4407):... 18更多12-13 12:32:44.560:W/Syst em.err(4407):导致: java.security.cert.CertPathValidatorException:未找到 证书路径的信任锚点。 12-13 12:32:44.560:W/System.err的(4407): ...... 23多个

我的连接代码看起来如下:

KeyStore ks = KeyStore.getInstance("PKCS12");

ks.load(context.getResources().openRawResource(R.raw.gecko_cert_1), "gecko_cert_1".toCharArray());

KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");

kmf.init(ks, "gecko_cert_1".toCharArray());

SSLContext sc = SSLContext.getInstance("TLS");

sc.init(kmf.getKeyManagers(), null, null);

//request

URL serverURL = new URL(myurl);

HttpsURLConnection conn = (HttpsURLConnection)serverURL.openConnection();

conn.setSSLSocketFactory(sc.getSocketFactory());

//conn.setHostnameVerifier(DO_NOT_VERIFY);

conn.setReadTimeout(10000 /* milliseconds */);

conn.setConnectTimeout(15000 /* milliseconds */);

conn.setRequestMethod("GET");

conn.setDoInput(true);

// Starts the query

conn.connect();

干杯, 马尔辛

+0

在你的文章中你提到你有在iOS中工作的证书认证。你能提供你在iOS上使用证书认证的代码吗? –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值