当前位置: 首页 > 面试题库 >

Android / Java —如何创建HTTPS连接?

廖琨
2023-03-14
问题内容

我这里有代码,可让我连接到https服务器并传输数据。它工作正常,但是我想知道我是否以正确的方式进行操作,并且实际上是在建立安全连接。请检查我的工作。谢谢。

public class HTTPSClient extends DefaultHttpClient
{

    public HTTPSClient() 
    {
    }

    @Override
    protected ClientConnectionManager createClientConnectionManager()
    {
        SchemeRegistry registry = new SchemeRegistry();

        HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
        final SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
        socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
        //socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", socketFactory, 80));
        registry.register(new Scheme("https", socketFactory, 443));
        HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, "UTF-8");

        return new SingleClientConnManager(params, registry);
    }
}

我像这样使用此代码:

HttpResponse response = mConnection.httpsClient.execute(new HttpHost("www.somehostname.com", 80), new HttpGet("https://someaddress")));

然后,我从那里阅读响应。再次感谢。


问题答案:

查看Apache HttpClient 的官方Custom SSL上下文教程。

正如Stephen C所提到的,您不需要为https上下文注册端口80。将其注册为http(如果需要)。这意味着,当您调用https
url时,将使用您指定的适当的socketFactory。

注意:在大多数情况下,当您使用自定义证书或不太知名的发行者的证书从Android设备连接到站点时,您将收到“证书不受信任”或类似的例外情况。在这种情况下,您需要为您的应用程序创建一个自定义证书存储,以便它将信任您的服务器证书。如果您想知道实现此目标的热力,可以看一下我的博客文章

如果要检查,如果您的设备确实通过安全连接进行通信,则可以从Android模拟器调用https端点,并使用开发人员计算机上的Wireshark捕获流量。

希望这可以帮助



 类似资料:
  • 如何在不使用https的情况下使用带有参数的方案?它仅适用于https,我想使用其他代码,例如使用url打开应用程序: 这是我的实际代码: 我试过了 非常感谢。

  • 问题内容: 我正在做一个https帖子,但是却得到ssl异常的一个例外,不受信任的服务器证书。如果我做正常的HTTP,它工作正常。我是否必须以某种方式接受服务器证书? 问题答案: 我正在猜测,但是如果你想进行实际的握手,则必须让android知道你的证书。如果你只想接受任何内容,请使用以下伪代码通过Apache HTTP Client获得所需的内容: CustomSSLSocketFactory:

  • 问题内容: 给定一个SSL密钥和证书,如何创建HTTPS服务? 问题答案: 我发现以下示例。 这适用于节点v0.1.94-v0.3.1。在新版本的节点中被删除。 直接从该来源:

  • 问题内容: 请帮助我创建HTTPS龙卷风服务器我当前的代码Python3不起作用 HTTPS对我来说很重要,请帮忙 问题答案: 无需使用。 请尝试以下操作:

  • 问题内容: 在哪里可以找到适用于Java的Java多图实现,而无需包含任何其他类等。我发现这些实现都需要其他东西,而这些东西又需要其他东西,而且很快就会变得混乱。我正在从C ++移植一个项目,并且是java的新手(这个项目也是如此,所以我在使它正常工作的同时尽量保持相同),因此任何参考或示例都很好。 问题答案: 您可以使用地图和列表来创建多图。假设您要将整数与类类型T的列表相关联。请使用以下代码:

  • 据我所知,要建立事件流,必须在客户端上创建一个事件源对象,并将其传递给服务器以注册自己。服务器在收到此请求后,适当地设置响应标头并按照事件流格式发送数据。我设置了这个流,它可以通过超文本传输协议工作,但在向服务器添加SSL后,事件流正在创建,服务器会抛出501-未实现错误。经过一些研究,我认为这可能是CORS问题,并添加了适当的标头,但这也没什么不同。我还尝试了通常适用于501个错误的小修复,例如