Rya*_*anM 14 java ssl https android
我这里有代码,允许我连接到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);
}
}
Run Code Online (Sandbox Code Playgroud)
我像这样使用这段代码:
HttpResponse response = mConnection.httpsClient.execute(new HttpHost("www.somehostname.com", 80), new HttpGet("https://someaddress")));
Run Code Online (Sandbox Code Playgroud)
然后我从那里读了回应.再次感谢.
查看Apache HttpClient 的官方自定义SSL上下文教程.
正如Stephen C所提到的,您不需要为https上下文注册端口80.将其注册为http(如果需要的话).这意味着,当您调用https url时,将使用您指定的相应socketFactory.
注意:当您从Android设备连接到具有自定义证书或来自非知名发行人的证书的站点时,您将在大多数情况下收到"不受信任的证书"或类似的例外.如果是这种情况,则需要为应用程序创建自定义证书存储区,以便它信任您的服务器证书.如果你想知道热门来实现这一点,你可以看看我的博客文章
如果要检查,如果您的设备确实通过安全连接进行通信,则可以从Android模拟器调用https端点,并在开发人员计算机上使用Wireshark捕获流量.
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
18811 次 |
| 最近记录: |