支付安全基础 —— HTTPS的故事
本文主要讲述了HTTPS的基本原理,通过HTTPS握手过程、证书链、中间人攻击、CA机构等问题,详细解释了百付宝系统中用到的HTTPS安全知识,同时,介绍了如何查看www.baifubao.com的线上证书及其含义。最后藉由查看证书,来屏蔽不安全证书带来的潜在风险。
“互联网仍然处于开端的开端阶段(the beginning of its beginning)”《失控》的作者凯文.凯利如是说。
仅仅是这开端的几十年就已经创造出了比过去所有的历史创造的财富的总和还要多。
如果信息不安全,那么互联网创造的财富不能被保证。HTTPS为此而生。
1. HTTPS概述
HTTPS并不是一个单独的协议,而是对工作在一加密连接(SSL/TLS)上的常规HTTP协议。通过在TCP和HTTP之间加入TLS(Transport Layer Security)来加密.
(注: TLS为新版本的SSL)
2. 为何需要HTTPS?
不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
- 窃听风险(eavesdropping):第三方可以获知通信内容。
- 篡改风险(tampering):第三方可以修改通信内容。
- 冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的。那么SSL/TLS如何解决这三大风险呢?
2.1 所有信息都是加密传播,第三方无法窃听
HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
这里就要比较对称加密和非对称加密了。
- 对称加密:
加密和解密的密钥是相同的.
假设A和B之间通信,使用对称密钥是123.
- A和B写信需要用123加密.
- B收到A的信息,同样需要123解密。
对称加密的最大风险在于密钥一旦泄露,那么被截获的信件内容就会被破解.
- 非对称加密:
加密和解密的密钥是不同的分为私钥和公钥。
私钥: 只有一份, 保存在收信人手中。不会在通信中传输,不会被泄露。
公钥: 可以有多份,保存在写信人手中。
假设B要给A写信:
- A先生成一对公钥(123)和私钥(456)
- A要把自己的公钥(456)通过某种安全的方式(数字证书,下文会提到)交给B
- B用公钥(456)加密信件内容然后发给A
- A使用私钥(123)解开内容
因此即使Step2时公钥泄露,那么即使B给A写的信被截获,由于没有A的私钥依然无法被解开.
2.2 具有校验机制,一旦被篡改,通信双方会立刻发现
2.3 配备数字证书,防止身份被冒充
如果数字证书是CA认证的,那么就可以避免身份冒充.
什么是数字证书呢? 何为CA?
数字证书是一个文件。此文件保存了加密过的用户的信息及公钥。对于百度钱包而言,数字证书就包含经过CA认证(使用CA的私钥加密)的域名(www.baifubao.com)以及公钥等信息。
数字证书在HTTPS的什么时候会用上呢?这里就要提到HTTPS握手。
3. HTTPS握手过程
- Step1: 服务端返回的数字证书(此为用户证书),客户端(浏览器)会进行如下验证:
1) 遍历计算机以及浏览器中保存的根证书(ROOT CA)和中间证书(Intermediate CA),若其中某个根证书或中间证书的公钥可以解开server端的证书,获得server的公钥和server域名. 否则握手失败。 整个HTTPS通信的唯一核心保障就是可信的根证书。
2) 判断证书中的域名(www.baifubao.com)是否和正在访问的域名相同。否则认证失败,浏览器会提示证书不可信。但是握手加密依然可以继续。 - Step2: 客户端(浏览器)产生一个随机的对称密钥
- Step3: 使用证书中服务端的公钥加密此对称密钥
- Step4: 将此已经加密过的对称密钥发给server。至此client和server都通过可靠的手段拥有对称密钥.
- Step5: 通过对称密钥加密Http的通信内容。
通过上述的握手过程可以直到,非对称密钥只是用来加密传输对称密钥的。因为可以保证传输中的对称密钥在传输的过程中无法被破解。所以握手之后的内容通信就是安全的。
握手过程中涉及到两种证书:
- https握手时server发给client的证书成为用户证书
- client所在计算机中原本保存的是 根证书(ROOT CA)和中间证书(Intermediate CA)
为何需要可信的根证书呢?这就需要提到中间人攻击
4. 中间人攻击
假设A是服务器,B是用户,B向A发起HTTPS连接,于是A需要将自己的公钥发给B。中间人C通过某种手段可以截获并伪造AB之间的通讯(比如GFW或者共享wifi等)。
那么C可以伪造一份A的公钥,并保有这分假公钥的私钥;然后截获A发给B的真公钥,并伪造自己的身份,让B认为自己就是A,并把伪造的公钥发给B;如此一来,B会通过伪造的公钥给A发送密文,而C就可以截获这些密文并利用手中的私钥轻易的解密这些密文了;然后将这些密文通过正确的公钥转发给服务器A,这样AB之间的通讯仍将继续,AB在毫不知情的情况下被中间人把证书“偷梁换柱”,从而达成了中间人攻击,AB之间的非对称加密形同虚设,从而TLS协议的对称加密的密钥就能被C轻易的获取。
如此,TLS完全告破。
总结:如果你安装了 中间人(代理服务器)自己生成的根证书,那么就中招了。
举个例子:
Fiddler对https的抓取就是靠中间人攻击的方式。打开Fiddler ,Tools->Fiddler options->HTTPS中的https capture,那么fidder会提示你安装一个fiddler自己生成的根证书(fiddler自己作为CA)名为DO_NOT_TRUST_FIDDLER_ROOT的根证书。如图:
之后当浏览器访问的每个https的域名(如www.baifubao.com等):
- fiddler会作为客户端先解开https内容
- 使用自己作为CA(名为DO_NOT_TRUST_FIDDLER_ROOT)的私钥,对baifubao这个域名颁发一个用户证书。
- https握手时向浏览器发送这个用户证书
浏览器收到fiddler作为server端返回的https回应时:
- 尝试解开server发来的用户证书,由于已经安装了fiddler的根证书,因此可以解开。
- 其中的域名是google.com,同浏览器访问的域名一致,因此证书这一部分就验证成功了。接下来的握手就自然可以完成。
CA机构到底是什么呢?
5. CA,证书链,根证书
5.1 数字证书认证机构(CA)
- 它的出现就是为了防止中间人攻击的。
- 防止中间人攻击,说白了就是要确保B收到的A的公钥(证书)真实有效,这样数字证书认证机构应运而生。
- 数字证书认证机构说白了就相当于一个受信任的中间人。CA有一对根密钥,其公钥称为根证书。
A向CA申请一个证书,则CA利用其私钥加密A的公钥,其结果就是“服务器A,通过CA验证的证书”。
而在用户的操作系统(或者浏览器)中,会集成世界范围内所有被信任的CA的根证书。
这样,用户B在收到A发送给他的证书后,需要利用CA的根证书(公钥)解密后才能得到正确的公钥,如此一来,就完成了对A发送过来的信息的验证,证明了A的正身,不是C伪造的假证书,从而达成了中间人攻击的防范。
5.2 数字证书从何而来
5.2.1 对于根证书(ROOT CA)和中间证书(Intermediate CA)
- 在用户的操作系统(或者浏览器)中,会集成世界范围内所有被信任的CA的根证书。
- 安装软件时顺带安装,如支付宝安全控件等,此时软件会请求管理员权限(流氓...)。
- 用户自己下载安装,如12306网站
5.2.2 对于用户证书
比如www.baifubao.com的证书,是百付宝公司通过如versign之类相关认证机构去资质审核以及缴费获得的。那么https访问中,server发来的数字证书长啥样呢?
5.3 百度钱包www.baifubao.com的证书
点击浏览器导航栏左上角的小锁
www.baifubao.com证书路径中有三层,表示三级证书链。那么什么是证书链呢?
5.4 证书链
CA证书分为两类:根证书(Root CA)和中间证书(Intermediate CA)。但是根证书的使用是收到严格限制的,不可能对于每一类用户都使用根证书去签发子数字证书,所以就有了中间证书的概念。
中间证书由根证书或上一级中间证书签发,它可以再往下级签发数字证书。
例如我们自己为某个域名申请了证书 My CA,那么对于三级证书链,它的签发过程如下:
上面讲到的签发关系很像链式结构,所以被称作证书链。
验证的过程可想而知,就是签发的逆过程,这是通过证书链来完成的:
浏览器会在计算机以及浏览器的证书列表中查找此CA是否可信, 如果有则认为My CA是可信的;
如果没有,继续往上找,直到根证书:
如果根证书是可信的,那么整条证书链就是可信的;
如果根证书不可信,那么My CA将被认作是不可信的,浏览器就会发出警告。
所以说,对于刚才www.baifubao.com的3级证书链来说,根证书(ROOT CA)是Versign Class3 Public xxxx . 中间证书(Intermediate CA)是Versign Class3 International xxxx
那么如何查看自己安装的根证书呢?
5.5 如何查看已经安装的数字证书
l 对于windows平台:win+R, 输入certmgr.msc
l 对于Ubuntu: 放在/usr/share/ca-certificates/中
5.6 有风险的根证书
没错,我发现自己的根证书列表中竟然有支付宝的alipay,这证书是啥时候跑进来的?
alipay原本没有versign的待遇的,但是自从你装了支付宝安全控件之后,他就自己插进来了,太危险了。事实上把alipay相关的根证书删掉依然是可以正常使用支付宝的,因为alipay有versign认证的证书。
再次重复一句,整个HTTPS通信的唯一核心保障就是可信的根证书。这种自己安装不可信的根证书会有遭到中间人攻击的风险。
5.7 为何就不能安装看起来靠谱的根证书呢?
导入ROOTCA的危险性:
如果导入支付宝,铁道部12306.cn这种第三方CA的根证书,将会大大增加受到中间人攻击的可能性。如果支付宝私钥泄露,所有支付宝用户都有遭到中间人攻击的可能性。
而铁道部的根证书更危险,铁道部的私钥必然对官方是公开的,GFW完全有能力通过铁道部的私钥来实现对所有导入了铁道部CA根证书的用户的中间人攻击,让你的HTTPS加密流量完全暴露给GFW。正确的做法是,不导入根证书,访问12306购票时候,无视证书警告,点仍然继续,依然可以正常购票.
不止如此,安装个支付宝控件,你会发现多了一个OSCCA的ROOTCA,然后你查找OSCCA,结果是:国家商用密码办公室...
如果GFW之类的代理服务器想要窃听你的https内容,就会像Fiddler一样,向所有你访问的域名颁发一个用户证书,用这个证书来和浏览器通信,从而达到窃听目的。
劝大家,运行certmgr.msc,把奇怪的证书都清理干净吧。添加根证书的行为就是给自己留下非常危险的后门。
6. 总结
至此大家应该了解Https是通过怎样的神力保护我们的网络。在21世纪每个网络通信都应该使用Https
支付安全基础 —— HTTPS的故事的更多相关文章
- 网络抢票黄牛,大部分是骗人的。公布一个骗钱黄牛,QQ:2233261390,QQ群:29443597,支付页面:https://me.alipay.com/q336
想着给女友买张回广州的回程火车票,抢了3天也没弄到.情急之下找了网络上所谓的黄牛.结果上当受骗.具体经过是这样的: 对方承诺抢到再付款.于是等他抢到后截图给我看,而且可以远程到他的机器去看,我也确实远 ...
- Nginx基础 - HTTPS安全web服务
1.HTTPS配置语法 Syntax: ssl on | off; Default: ssl off; Context: http, server Syntax: ssl_certificate fi ...
- iOS系列 基础篇 02 StoryBoard 故事板文件
iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...
- 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包
微信支付教程系列之现金红包 最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...
- 【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo
开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩 ...
- https协议了解,以及相关协议的解析
HTTPS简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版. ...
- 转: 认识 HTTPS
HTTPS简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版. ...
- iOS - HTTPS接口加密和身份认证
为什么要使用HTTPS代替HTTP HTTPS和HTTP的区别 https协议需要到CA申请证书,一般免费证书很少,需要交费. http是超文本传输协议,信息是明文传输,https则是具有安全性的SS ...
- UnionPay,ChinaPay 最新 银联支付接口C#\Asp.net\MVC 版本
1.概念普及 一.理解什么是UnionPay.ChinaPay 这两个概念如果搞不清楚,绝对够你瞎折腾一段时间的. UnionPay:中国银联,最大的机构:他本身也提供系统接口但都是B2B的,对于单个 ...
随机推荐
- tableview的重用机制(面试必问)
iphone重用机制是苹果为了实现大量数据显示而采用的一种节省内存的机制,比如在UITableView和ScrollView 等地方.为什么要“可重用”???对于我们的项目来说,内存控制是必不可少的, ...
- 更改primefaces theme
PrimeFaces is using jQuery ThemeRoller CSS theme framework, and come with 30+ pre-designed themes th ...
- linux下samba的安装与使用
samba挺好用的,配置项不多,正好适合我这种懒人使用. 下面是CentOS上面的安装与使用方法. 安装:yum -y install samba 安装一个名字叫samba的软件,安装过 ...
- BZOJ1588[HNOI2002]营业额统计
传送门 平衡树常规题,给出两种实现算法 Treap版: //OJ 1610 //by Cydiater //2016.9.1 #include <iostream> #include &l ...
- JavaWeb---总结(十)JSP标签
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
- PHP无限分类分类导航LINK的代码
<?php function getCatePath($cid,&$result=array()){ include("conn.php"); $sql=" ...
- 利用jquery实现网站中对应栏目下面内容切换效果。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ORACLE ORA-01157: 无法标识/锁定数据文件
create undo tablespace MOZI datafile 'E:\oracle\product\10.2.0\oradata\orcl\MOZI.DBF' size 2048M ext ...
- Runner站立会议03
开会时间:21.10~21.30 地点:二教103 今天做了什么:Android的存储,只是存储在/date/date 文件夹下和sd卡 明天准备做什么:学习Android的数据库的使用sqlite ...
- Stack类
栈是采用先进后出的数据存储方式,每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出. import java.util.Stack; //=============================== ...