【问题标题】:connect over ssl without certificate在没有证书的情况下通过 ssl 连接
【发布时间】:2011-08-27 03:34:26
【问题描述】:

我正在尝试在没有证书的情况下通过 SSL 端口 443 连接到我的服务器。

我收到一个错误:

javax.net.ssl.SSLException: 不受信任的服务器证书

阅读其他问题以解决问题,以下代码应该可以工作,但我仍然收到错误消息。我可能做错了什么?

HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient client = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("https", socketFactory, 443));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
httpclient = new DefaultHttpClient(mgr, client.getParams());

// Set verifier     
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
HttpGet httpget = new HttpGet(this.requestedURL);
httpget.addHeader(new BasicScheme().authenticate(creds, httpget));

try
{
    response = httpclient.execute(httpget);
}
catch(java.lang.Throwable t) {}

【问题讨论】:

  • 在 Stack Overflow 上查看此答案:stackoverflow.com/questions/995514/…
  • 如果我没记错的话,您正在尝试从 Java 代码连接到服务器 URL。如果是这样,您是否使用自签名证书?或者您是否有第三方生成的证书,例如 versign、godaddy?我在您的代码中没有看到任何与根证书相关的内容,您的密钥库中有根证书吗?
  • St3fan:这个例子没有.execute那么远。所以,无论如何我都尝试了,它仍然失败。我复制了它,粘贴了它,并在代码之后添加了执行。仍然失败。
  • 看过这篇文章。对于 HTTPS over 443 Click here,这是一个很好的答案

标签: java android


【解决方案1】:

您的客户端信任库不信任服务器证书。它可能是自签名证书,因此您需要将其导入客户信任库。或者让CA签署。忽略服务器证书是不安全的,你最好不要使用 HTTPS。

【讨论】:

    【解决方案2】:

    在尝试了所有其他解决方案后,android 2.2 + 需要特殊代码。这有效

    Custom SSL handling stopped working on Android 2.2 FroYo

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 1970-01-01
      • 2012-06-07
      • 2015-04-24
      • 2015-10-04
      • 2014-08-30
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      相关资源
      最近更新 更多