我无法接受我的自签名证书,我使用以下方法:
HostnameVerifier hostnameVerifier =
org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient dummy = new DefaultHttpClient();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https", socketFactory, 8443));
SingleClientConnManager mgr = new SingleClientConnManager(
dummy.getParams(), registry);
DefaultHttpClient client = new DefaultHttpClient(mgr, dummy.getParams());
// make connection with 'client' now.
我的服务器正在使用https监听8443,我可以通过浏览器验证这一点。我正在从同一主题的其他几篇文章中采取上述内容:
不确定为什么它对我不起作用,只是在连接时不断获得“不信任的服务器证书”例外。任何想法?
Accepting a certificate for HTTPs on Android
由于
答案 0 :(得分:1)
默认情况下,java信任默认信任库中的证书,即cacerts
当然,您的自签名证书,您已将服务器配置为发送以进行服务器身份验证,因为它不在受信任的证书中,因此将被拒绝为不受信任。
为了解决这个问题,你必须配置JSSE使用的sslcontext来使用你自己的自定义信任库,它将覆盖java的默认值并包含你的自签名证书。
这是通过在初始化时在信任管理器中加载密钥库来完成的
没有在Android上工作,但是如果您看到这篇文章appache httpsclient,您可以在问题和Oleg的答案中找到用作参考的代码。
希望这有帮助
答案 1 :(得分:-1)
我在众多开发服务器上都有这个。除了不将SSL与自签名证书一起使用之外,别无他法。
这似乎是一个Java安全问题。