一、HTTPS的安全性体现在哪
HTTP(超文本传输协议,Hyper Text Transfer Protocol)是我们浏览网站信息传输最广泛的一种协议。HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)相比HTTP增加了一个S,就是安全的(Secure),这个安全体现在什么地方呢?http中的信息是明文传输的,也就是说很容易被监听、截获和篡改;具体来说在http中常用的post和get方法,也是我们在网站上注册、登录帐号时要使用的请求方法,在网站页面不做保护处理的情况下,帐号密码这些信息都将明文的在网络中传输;对于我们浏览的页面内容,也都以字符串的形式被轻松的看到。
使用Fiddler软件,将自己手机连接代理,看看哪些网站或应用还在用http,还在传输着什么。
HTTPS则是在原有的应用层协议HTTP之下,传输层TCP之上,增加了安全套接字层(SSL),来实现信息的安全传输,提供了:
(1)数据加密: 传输的数据是经过加密的
(2)身份认证: 通过证书确认网站的真实性,在启用双向认证时,可确认用户的合法性
(3)内容完整性: 防止内容在传输过程中被篡改
 
二、HTTPS安全性的基础
HTTPS的安全性离不开SSL协议,理解SSL协议的实现离不开数字证书和非对称加密。这里不会详细介绍SSL协议的实现过程,而是让人能简单理解SSL如何利用数字证书,实现其数据加密和身份认证的功能。
 
对称加密
加密者和解密者共享密钥,加密者用共享密钥将明文变为密文,解密者用共享密钥将密文变为明文;一般相比非对称加密效率更高,但要求双方提前共享密钥。常见的有AES,DES等。
 
非对称加密
加解密需要密钥对实现,密钥对包括公钥(Public Key)和私钥(Private Key),将明文用公钥加密,私钥解密,或者用私钥加密,公钥解密。常见的有RSA ,ECC等。注意一般将公钥对外发布,大家都能获得,但私钥只有网站拥有者或特定的用户拥有;而且效率相比对称加密低,运算量大,时间更长。
 
数字摘要
是将任意长度的输入数据,经过单项哈希后,产生固定长度的输出数据。这么做的一个好处是能将大量的输入信息转换成较小的固定长度的信息。另外单项哈希保证了无法通过输出的摘要数据还原原始的输入数据;而且不同的输入几乎不可能产生相同的数字摘要。常见的摘要算法如SHA,MD5等。
注意的是网上常说的用MD5加密,那一般是不能解密的,因此不能算一种正常的加解密方法。
 
数字签名:
类似于手写签名,证明是经过你本人确认的,无法抵赖。具体就是利用私钥对原始信息的数字摘要进行加密形成数字签名,与原始信息一起发送给别人。对于接收信息的人,由于公钥能公开获取到,因此对收到的数字签名用公钥解密,再和收到的原始信息的数字摘要进行比对,就能确认是不是私钥的拥有者发送的内容,而且能确认中间有没有被人修改。
前面提到非对称加密的运算量大,时间长,因此数字签名都是对大量传输的信息产生数字摘要后进行加密。
 
数字证书
是一串身份信息按照指定的格式排列后,包含证书颁发机构进行数字签名的数据。常见的数字证书格式X.509 V3,存储到文件上一般一种为不含私钥的DER格式,以cer或者crt为文件后缀名,另一种为包含私钥的PKCS格式,以pfx或者p12为后缀。
数字证书中包括(不是全部):
(1)数字证书持有者身份信息 网站就包括所对应的URL或IP
(2)该证书拥有者对应的该证书公钥
(3)证书颁发者信息
(4)证书颁发者用私钥对证书持有者身份信息和公钥的签名 使用的摘要和签名算法
 
证书的验证:
1.两级证书:直接由权威或可信任(自己可设定是否信任)机构颁发给用户的证书
因此有权威机构一个证书(根证书),颁发给用户的一个证书
验证过程是使用颁发者的公钥,采用要验证的证书(后面称用户证书)中说明的签名算法,解密签名,对比根据用户证书上的持有者信息等计算出的数字摘要,看是否一致。
换种描述的说法:
(1)用户证书里有:
a.用户信息UInfo
b.签名用到的摘要算法H,和加解密算法S
c.用颁发者私钥签名的用户信息摘要S(H(UInfo)) (就是用户信息数字摘要H(UInfo),按一定格式编码后,私钥加密后获得S(H(UInfo)) )
d.颁发者信息
(2)验证用户证书
a.根据用户证书里的颁发者信息找到颁发者证书,获取颁发者公钥;
b.再用用户证书里说明的加解密算法S解密签名S(H(UInfo)) ,得到H(UInfo)'
c.根据用户证书中的摘要算法H,自己重新计算用户信息摘要,得到H(UInfo)
d.对比两次的计算结果H(UInfo)'和H(UInfo),如果相同则验证通过。
(3)颁发者证书的验证
需要在电脑预置或自己安装根证书,也就是颁发者的证书,作为认证的起点。
2.证书链的验证
首先证书颁发机构(CA)的根证书,可以签发子CA的证书,CA和子CA都可以审核注册者信息,然后为用户颁发证书。那么从CA到子CA,再到用户证书,构成了证书链。他的验证可以仿照两级证书的验证,一步步往上追,直到用户自己安装的根证书
 
现在再来看HTTPS中SSL保障安全传输的简单流程:
(1)首先用户在浏览器中发起HTTPS连接请求时,先从网站(服务端)获取了其证书;
(2)浏览器验证了网站证书有效性后,再对比证书中的URL或IP信息和实际访问的URL或IP是否一致;
(3)都正确后再利用证书中的公钥信息,建立安全的信息传输通道;(简单来说,浏览器可以用公钥加密一个共享密钥给服务端,因为只有服务端有私钥。详细的SSL连接建立流程比这里复杂的多,但基本原理类似)
(4)如果客户端将自己的证书发给网站,网站也可以确认用户的合法性
 
最后说明下HTTPS带来的性能和流量的损失。首次访问网站(服务端),建立SSL链接,客户端需要获取服务端的证书链,验证证书的有效性。这里证书链一般情况下就至少两个证书1K多的数据量,而如果没设置HTTP长连接,那么会导致每次访问请求都会产生握手连接过程,都会大的流泪消耗。好消息是目前一般的Android网络开发库,采用HTTP1.1,默认开启了Keep-Alive设置,但是要注意平衡好超时时长。

通俗的理解HTTPS以及SSL中的证书验证的更多相关文章

  1. HTTPS、SSL与数字证书介绍

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 HTTPS:在HTTP(超文本传输协议)基础上提出的一种安全 ...

  2. AFNetWorking https请求 SSL认证 自制证书

    1.服务器会给一个证书,一般为.pem格式证书 2.将.pem格式的证书转换成.cer格式的证书 打开电脑自带终端 ,进入到桌面  cd Desktop 回车回到桌面Desktop Admin$ 输入 ...

  3. 深入理解Https如何保证通信安全

    作为一名ABC搬运工,我相信很多人都知道Https,也都知道它是用来保证通信安全的,但是如果你没有深入了解过Https,可能并不知道它是如何保证通信安全的.我也是借着这次机会,和大家分享下我深入了解的 ...

  4. [整理]HTTPS和SSL证书

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: • https:在http(超 ...

  5. 简单地理解HTTPS 转

    原文地址:http://www.nowamagic.net/librarys/veda/detail/2394 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等 ...

  6. 怎样用第三方开源免费软件portecle从https站点上导出SSL的CA证书?

    在我这篇文章中.我提到了怎样用OpenSSL从https站点上导出SSL的CA证书?  这样的方式不太直观,且须要用户自己手工拷贝.然后另存为文件,那么有没有更好更方便的工具呢? 幸运的是,有热心于开 ...

  7. 通俗理解数字签名,ssl数字证书和https

    前言 最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应.签章有法律效应必须满足两个条件: 能够证明签名,盖章者是谁,无法抵赖 PDF合同在签章后不 ...

  8. 你的MySQL服务器开启SSL了吗?SSL在https和MySQL中的原理思考

    最近,准备升级一组MySQL到5.7版本,在安装完MySQL5.7后,在其data目录下发现多了很多.pem类型的文件,然后通过查阅相关资料,才知这些文件是MySQL5.7使用SSL加密连接的.本篇主 ...

  9. 理解https中的安全及其实现原理

    Google的一份网络上的 HTTPS 加密透明报告(数据截至2022年1月)中指出HTTPS 连接的普及率在过去几年激增,互联网上排名前 100 位的非 Google 网站HTTPS 使用情况为:9 ...

随机推荐

  1. 报错:未能加载文件或程序集“WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

    □ 背景 通过NuGet安装某程序包后,运行程序出现如上错误.   □ 分析 可能是程序集版本不兼容引起的,可以通过NuGet先把程序包删除,然后再安装最新或某个版本的程序包.   □ 解决方法 通过 ...

  2. 转 UITextField

    //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...

  3. 【java】关于Map的排序性的一次使用,有序的Map

    关于Map的排序性的一次使用,有序的Map >>>>> hashmap是按key的hash码排序的,而treemap是利用comparator 进行key的自然排序的 / ...

  4. apt-get无法下载,一些网址Not Found 404

    apt-get无法下载,网址报 Not Found 404,原因是apt软件下载源有问题. 1.将/etc/apt/source.list里的内容替换. 在其他能够下载apt的ubuntu机器中拷贝过 ...

  5. C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

    面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...

  6. Calendar 对象的使用实例

    1.Calendar demo例子 JavaCalendar 类时间操作,示范代码. public class CalendarDemo { private static SimpleDateForm ...

  7. 如何重构"箭头型"代码

    本文主要起因是,一次在微博上和朋友关于嵌套好几层的if-else语句的代码重构的讨论(微博原文),在微博上大家有各式各样的问题和想法.按道理来说这些都是编程的基本功,似乎不太值得写一篇文章,不过我觉得 ...

  8. Qt Quick 和qml介绍

    很多人不了解Qt Quick和Qml,还有很多人对其存在偏见.这篇文章就是来向这些有困惑的人介绍一下其是什么,有什么特点. 首先,这两个是一个东西吗? 答案:是的.但是,具体来说,Qt Quick是框 ...

  9. An easier way to debug windows services

    Have you got tired of attaching the Visual Studio debugger to the service application? I got the sol ...

  10. JQuery巧妙利用CSS操作打印样式

    一.添加打印样式 1. 为屏幕显示和打印分别准备一个css文件,如下所示:  用于屏幕显示的css: <link rel="stylesheet" href="cs ...