Android安全开发之HTTPS就那么回事

一、HTTPS通讯原理

Https是基于安全目的的Http通道,其安全基础由SSL层来保证。

最初由Netscape公司研发,主要提供了通讯双方的身份认证和加密通信方法。

二、SSL协议通信过程

1.客户端浏览器发送一个连接请求给服务器,服务器将自己的证书(包含服务器公钥S_PuKey)、对称加密算法种类以及其他相关信息返回给客户端

2.客户端浏览器检查服务器传送到CA证书是否由自己信赖的CA中心签发,若是,则执行第4步,否则,给客户一个警告:询问是否继续访问

3.客户端浏览器比较证书里的信息,如证书有效期,服务器域名和公钥S_PuKey,与服务器传回的信息是否一致,如果一致,则浏览器完成对服务器的身份认证。

4.服务器要求客户端发送客户端证书(包含客户端公钥C_PuKey)、支持的对称加密方案,以及其他的相关信息。收到后,服务器进行相同的身份验证,若没有通过验证,则拒绝连接;

5.服务器根据客户端浏览器发送的密码种类,选择一种加密程度最高的方案,用客户端公钥C_PuKey加密后通知客户端浏览器

6.客户端浏览器通过私钥C_PrKey解密后,得知服务器选择的加密方案,并选择一个通话密钥Key,接着用服务器公钥S_PuKey加密后发送给服务器

7.服务器接收到的浏览器传送的消息,用私钥S_PrKey解密,获得通话密钥key

8.接下来的数据传输都使用该对称密钥key进行加密。

上面所述的是双向认证SSL协议的具体通讯过程,服务器和用户双方必须都有证书。由此可见,SSL协议是通过非对称密钥机制保证双方身份认证,并完成建立连接,在实际数据通讯时通过对称密钥机制保证数据安全性

三、SSL协议基础

SSL协议位于TCP/IP协议与各种应用层之间,本身又分为两层:

SSL记录协议:(SSL Record Protocol)建立在可靠传输协议(TCP)之上,为上层协议提供数据,封装,压缩,加密等基本功能。

SSL握手协议:(SSL Handshake Protocol)在SSL记录协议之上,用于实际数据传输前,通讯双方进行身份认证,协商加密算法,交换加密密钥等。

四、HTTPS与HTTP的区别?

协议基础不同:HTTPS在HTTP的基础上加入了SSL层

通讯方式不同:HTTPS在数据通讯之前需要客户端、服务器进行握手(身份验证),建立连接后,传输数据需要经过加密,通信端口为443

五、Android配置

1.需要验证证书

a.导出公钥。在浏览器上用https访问tomcat,查看其证书,并另存为一个文件(存成了X.509格式:xxxx.cer)

b.导入公钥。把xxxx.cer放在Android的assets文件夹中,以方便在运行时通过代码读取此证书

以下为方便大家复制:

AssetManageram=context.getAssets();

InputStreamins=am.open("robusoft.cer");

try{

//读取证书

CertificateFactorycerFactory=CertificateFactory.getInstance("X.509");//问1

Certificatecer=cerFactory.generateCertificate(ins);

//创建一个证书库,并将证书导入证书库

KeyStorekeyStore=KeyStore.getInstance("PKCS12","BC");//问2

keyStore.load(null,null);

keyStore.setCertificateEntry("trust",cer);

returnkeyStore;

}finally{

ins.close();

}

//把咱的证书库作为信任证书库

SSLSocketFactorysocketFactory=newSSLSocketFactory(keystore);

Schemesch=newScheme("https",socketFactory,443);

//完工

HttpClientmHttpClient=newDefaultHttpClient();

mHttpClient.getConnectionManager().getSchemeRegistry().register(sch);

2.不需要验证证书


方便复制:

public class Demo extends Activity {

/** Called when the activity is first created. */

private TextView text;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

text = (TextView)findViewById(R.id.text);

GetHttps();

}

private void GetHttps(){

String https = " https://800wen.com/";

try{

SSLContext sc = SSLContext.getInstance("TLS");

sc.init(null, new TrustManager[]{new MyTrustManager()}, new SecureRandom());

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());

HttpsURLConnection conn = (HttpsURLConnection)new URL(https).openConnection();

conn.setDoOutput(true);

conn.setDoInput(true);

conn.connect();

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

StringBuffer sb = new StringBuffer();

String line;

while ((line = br.readLine()) != null)

sb.append(line);

text.setText(sb.toString());

}catch(Exception e){

Log.e(this.getClass().getName(), e.getMessage());

}

}

private class MyHostnameVerifier implements HostnameVerifier{

@Override

public boolean verify(String hostname, SSLSession session) {

// TODO Auto-generated method stub

return true;

}

}

private class MyTrustManager implements X509TrustManager{

@Override

public void checkClientTrusted(X509Certificate[] chain, String authType)

throws CertificateException {

// TODO Auto-generated method stub

}

@Override

public void checkServerTrusted(X509Certificate[] chain, String authType)

throws CertificateException {

// TODO Auto-generated method stub

}

@Override

public X509Certificate[] getAcceptedIssuers() {

// TODO Auto-generated method stub

return null;

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容