【发布时间】:2015-08-25 01:20:52
【问题描述】:
我正在尝试使用带有自签名证书的HTTPS 连接。
我已按照此处提到的创建自签名证书的步骤进行操作 - Creating Self-signed certificate。
即使在浏览器中也一切正常,它只向我显示我的证书由未知 CA 签名的消息。
但是我在证书中的 FQDN(服务器名称不匹配)名称存在问题,因为我在生成证书时设置了错误的名称。
我已经重新生成它,现在没有这样的错误。
我需要使用来自移动 Android 客户端的服务器证书,我找到了关于这个问题的精彩文章 - Use Retrofit with a self-signed or unknown SSL certificate in Android。 我已按照所有步骤操作,但不幸的是出现错误(异常)。
javax.net.ssl.SSLPeerUnverifiedException: Hostname 195.xx.xx.xx not verified:
certificate: sha1/qvH7lFeijE/ZXxNHI0B/M+AU/aA=
DN: 1.2.840.113549.1.9.1=#160e63726f73704078616b65702e7275,CN=195.xx.xx.xx,OU=Departament of Development,O=CROSP Solutions,L=Chernihiv,ST=Chernihiv,C=UA
subjectAltNames: []
at com.squareup.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:124)
您可以看到主机名相同,但仍然存在错误。
请帮助处理这个问题,我将不胜感激。
谢谢。
伪解决方案
当然我之前搜索过,发现HostName Verifier Solution。
我已经尝试过了,它有效。但是是否可以使用此解决方法,我将证书添加到我的应用程序中以便像前面的示例中那样动态读取它,在这种情况下是否仍在使用它。
使用 OkHttp 的解决方案是一行。 (如果您遵循教程中的所有步骤)。
okHttpClient.setHostnameVerifier(new NullHostNameVerifier());
但我仍然觉得这不是最好的解决方案,请大家有什么想法?
【问题讨论】:
标签: java android ssl https okhttp