电商安全 mall-https

您现在所在的位置 首页 > 电商安全 > android https连接建立 android实现https通信

android https连接建立 android实现https通信

android中实现Https基本就这两种方式,一种是不验证证书,一种是有验证证书(预防钓鱼)。

第二种方式实现复杂一些,需要将cer证书转换成BKS类型。这种方式也只能简单的防止钓鱼,不能有效的防止钓鱼。防止钓鱼最终还是靠用户分辨,在正规渠道下载应用。应用证书也能起到验证客户端的功能,个人认为使用证书验证客户端不合适,如果使用证书验证客户端,证书必须存放在应用程序中或使用时下载,android应用都是一个apk文件,很容易获取到里面的文件,如果是下载方式,更容易通过下载地址获取。如果想验证客户端的话,个人认为使用so文件封装数据更好时。

我们的手机很多时候使用公用wifi上网,这时我们的数据是暴漏了,这是的数据传输是非常危险的,用户的隐私数据很容易被第三方获取到,android客户端中使用https能有效的防止数据暴漏,防止第三方截获应用的通信数据。

android https连接建立:https与Http类似,只不过Https一般是通过post请求服务器,但是Https与http不同的是Https与服务器会话是处于连接状态。http则发送请求后连接就会断开。
发送post请求代码:
String query = r4 + “&pass=” + r3; //请求参数
byte[] entitydata = query.getBytes();//得到实体数据
HttpsURLConnection urlCon = (new URL(ticketurl)).openConnection();
urlCon.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded;charset=UTF-8”);
urlCon.setRequestProperty(“Content-Length”, String.valueOf(entitydata.length));
((HttpsURLConnection) urlCon).setRequestMethod(“POST”);
urlCon.setDoOutput(true);
urlCon.setDoInput(true);
urlCon.connect();

//把封装好的实体数据发送到输出流
OutputStream outStream = urlCon.getOutputStream();
outStream.write(entitydata);
outStream.flush();
outStream.close();

//服务器返回输入流并读写
BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
String line;

while ((line = in.readLine()) != null) {
return line;
}
in.close();
另外使用HttpsURLConnection时需要实现HostnameVerifier 和 X509TrustManager,这两个实现是必须的,要不会报安全验证异常。然后初始化X509TrustManager中的SSLContext,为javax.net.ssl.HttpsURLConnection设置默认的SocketFactory和HostnameVerifier。代码如下:
private myX509TrustManager xtm = new myX509TrustManager();
private myHostnameVerifier hnv = new myHostnameVerifier();

public HttpsURLConnectionTest() {

//初始化X509TrustManager中的SSLContext
SSLContext sslContext = null;

try {
sslContext = SSLContext.getInstance(“TLS”);
X509TrustManager[] xtmArray = new X509TrustManager[] { xtm };
sslContext.init(null, xtmArray, new java.security.SecureRandom());
} catch (GeneralSecurityException gse) {

}

//为javax.net.ssl.HttpsURLConnection设置默认的SocketFactory和HostnameVerifier
if (sslContext != null) {
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
}

HttpsURLConnection.setDefaultHostnameVerifier(hnv);
这样就不会报错了。

本文来源于互联网,版权归属于原作者。本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(3143591980@qq.com),我们收到后立即删除。