【问题标题】:Error when adding a self-signed certificate in Android在 Android 中添加自签名证书时出错
【发布时间】:2016-06-17 05:21:23
【问题描述】:

我正在尝试使用改造设置来自 Android 的自签名证书,并按照此站点上的说明进行操作:https://adiyatmubarak.wordpress.com/2016/01/19/adding-ssl-certificate-to-retrofit-2/

完成后,我收到以下错误:

 06-17 00:36:01.574 9898-9898/com.creardigitalm.samsungconciergeargentina     
    E/checkIfS7OrS7EdgeByModel: onFailure: Hostname ec2-54-187-245-213.us-west-2.compute.amazonaws.com not verified:certificate:sha1/x+YzLQ11jAtlgEG6qJg8W9cqp/k=
    DN:1.2.840.113549.1.9.1=#161e6c7569732e6a6172616d696c6c6f40637265617264697469616c2e636f6d,CN=54.187.245.213,OU=IT,O=Crear Digital,L=Cali,ST=Valle del Cauca,C=co
    subjectAltNames: []
    javax.net.ssl.SSLPeerUnverifiedException: Hostname ec2-54-187-245-213.us-west-2.compute.amazonaws.com not verified:
    certificate: sha1/x+YzLQ11jAtlgEG6qJg8W9cqp/k=
    DN:1.2.840.113549.1.9.1=#161e6c7569732e6a6172616d696c6c6f40637265617264697469616c2e636f6d,CN=54.187.245.213,OU=IT,O=Crear Digital,L=Cali,ST=Valle del Cauca,C=co subjectAltNames: []
    at okhttp3.internal.io.RealConnection.connectTls(RealConnection.java:197)
    at okhttp3.internal.io.RealConnection.connectSocket(RealConnection.java:145)
    at okhttp3.internal.io.RealConnection.connect(RealConnection.java:108)
    at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:188)
    at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:127)
    at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
    at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:289)
    at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)
    at okhttp3.RealCall.getResponse(RealCall.java:240)
    at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198)
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160)
    at okhttp3.RealCall.access$100(RealCall.java:30)
    at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127)
    at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:33)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:818)

如果有人可以帮助我,我将不胜感激。

【问题讨论】:

标签: android ssl ssl-certificate self-signed


【解决方案1】:

您可以在此关注 Android 的documentation。查看标题为“Unknown certificate authority”和“Self-signed server certificate”的部分。

您要做的是将自签名证书存储在应用程序包中,然后使用 Android 信任新的自签名证书。以下是他们文档中提到的步骤。

  1. 从 InputStream 加载 CA
  2. 创建一个包含我们信任的 CA 的 KeyStore
  3. 创建一个信任我们的 KeyStore 中的 CA 的 TrustManager
  4. 创建一个使用我们的 TrustManager 的 SSLContext
  5. 告诉 URLConnection 使用我们 SSLContext 中的 SocketFactory

您可以找到代码here

【讨论】:

  • 是的,这些正是我正在遵循的步骤,但我仍然收到错误。
猜你喜欢
  • 2019-08-23
  • 2020-05-29
  • 2017-02-18
  • 2023-04-02
  • 2015-11-16
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多