CRO*_*OSP 16 java ssl https android okhttp
我正在尝试使用HTTPS与自签名证书的连接.
我按照这里提到的创建自签名证书的步骤 - 创建自签名证书.
即使在浏览器中一切正常,它只向我显示我的证书由未知CA签名的消息.
但是我的证书中的FQDN(服务器名称不匹配)名称有问题,因为我在生成证书时设置了错误的名称.
我已经重新生成它,现在没有这样的错误.
我需要从移动Android客户端使用我的服务器sertificate,我找到了关于此问题的精彩文章 - 在Android中使用自签名或未知SSL证书的Retrofit.我已经遵循了所有步骤,但遗憾的是得到了一个错误(例外).
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)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的主机名相同,但仍然存在错误.
请帮忙处理这个问题,我将不胜感激任何帮助.
谢谢.
伪解决方案
当然我之前搜索过并找到了HostName Verifier Solution.
我试过了,它有效.但是可以使用这种解决方法,我将证书添加到我的应用程序中,以便像在前面的示例中一样动态地读取它,它是否仍然在这种情况下使用.
OkHttp的解决方案是一行.(如果您按照教程中的所有步骤操作).
okHttpClient.setHostnameVerifier(new NullHostNameVerifier());
Run Code Online (Sandbox Code Playgroud)
但我还是觉得这不是最好的解决方案,请问有什么想法吗?
Zho*_*gYu 19
有趣的是,如果请求主机是IP,则不使用"CN"来匹配它; 代替,
http://tools.ietf.org/html/rfc2818#section-3.1
iPAddress subjectAltName必须存在于证书中,并且必须与URI中的IP完全匹配"
如果你使用java的keytool,它可以通过
keytool -genkeypair -ext SAN=IP:195.xx.xx.xx ........
Run Code Online (Sandbox Code Playgroud)
NullHostNameVerifier也适用于您的用例.您的客户只信任一个证书; 只要连接使用该证书,您就是安全的; 主机名在这里没关系.
| 归档时间: |
|
| 查看次数: |
22079 次 |
| 最近记录: |