1. https如何保证安全
非对称加密:如果是公钥加密的数据私钥才能解密,所以如果把公钥交给你,你就可以用这个公钥来加密未来我们进行数据交换的秘钥,发给我时,即时中间被人截获了,也无法解密。
但这也并不是最安全的,如果中间的人截获到发给你公钥后,自己制造了一个公钥发送给你,这时你把对称密钥用这个公钥加密发回经过中间人,他可以用私钥解密并拿到对称密钥,此时他在把此对称密钥用我的公钥加密发回给我,这样中间人就拿到了对称密钥,可以解密传输的数据了。
为了更安全,引入了数字证书的概念,我首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给我,此时我就不是简单的把公钥给你,而是给你一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书一定是我给你的。
综上:https中中使用对称加密算法加密数据+非对称加密算法交换密钥+数字证书验证身份
2. https协议
https协议中设计内容比较多,特别是一些加密算法
2.1 对称加密算法
(1)对称加密是指加密和解密使用相同密钥的加密算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信至关重要。
(2)对称加密又分为两种模式:流加密和分组加密
(3)对称加密算法优缺点
优点:算法公开、计算量小、加密速度快、加密效率高。
缺点:(1)交易双方都使用同样钥匙,安全性得不到保证;
(2)每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。
(3)能提供机密性,但是不能提供验证和不可否认性。
2.2 非对称加密算法
(1)在非对称密钥交换算法出现以前,对称加密一个很大的问题就是不知道如何安全生成和保管密钥。非对称密钥交换过程主要就是为了解决这个问题,使得对称密钥的生成和使用更加安全。
密钥交换过程涉及到随机数生成,模指数运算,空白补齐,加密,签名等操作。
常见的密钥交换算法有RSA,ECDHE,DH,DHE等算法。
RSA的简单介绍:算法实现简单,安全性高;缺点就是需要比较大的素数也就是质数来保证安全强度,很消耗CPU运算资源。
RSA是目前唯一一个既能用于密钥交换又能用于证书签名的算法。
(2)非对称加密算法的缺点
1>CPU计算资源消耗非常大。一次完全TLS握手,密钥交换时的非对称解密计算量占整个握手过程的90%以上。而对称加密的计算量只相当于非对称加密的0.1%,如果应用层数据也使用非对称加解密,性能开销太大,无法承受。
2>非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是2048位,意味着待加密内容不能超过256个字节。
所以公钥加密目前只能用来作密钥交换或者内容签名,不适合用来做应用层传输内容的加解密。
2.3 身份认证
(1)https协议中身份认证的部分是由数字证书来完成的,证书由公钥、证书主体、数字签名等内容组成,在客户端发起SSL请求后,服务端会将数字证书发给客户端,客户端会对证书进行验证,并获取用于秘钥交换的非对称密钥。
(2)数字证书作用
1>身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。
2>分发公钥。每个数字证书都包含了注册者生成的公钥。在SSL握手时会通过certificate消息传输给客户端。
(3)申请一个受信任的数字证书通常有如下流程:
1,终端实体(可以是一个终端硬件或者网站)生成公私钥和证书请求。
2,RA(证书注册及审核机构)检查实体的合法性。如果个人或者小网站,这一步不是必须的。
3,CA(证书签发机构)签发证书,发送给申请者。
4,证书更新到repository(负责数字证书及CRL内容存储和分发),终端后续从repository更新证书,查询证书状态等。
(4)数字证书验证:
申请者拿到CA的证书并部署在网站服务器端,那浏览器发起握手接收到证书后,如何确认这个证书就是CA签发的呢?怎样避免第三方伪造这个证书?答案就是数字签名(digital signature)。数字签名是证书的防伪标签,目前使用最广泛的SHA-RSA(SHA用于哈希算法,RSA用于非对称加密算法)数字签名的制作和验证过程如下:
1,数字签名的签发。首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用CA自己的私钥对消息摘要进行加密。
2,数字签名的校验。使用CA的公钥解密签名,然后使用相同的签名函数对待签名证书内容进行签名并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功。
参考自http://www.jianshu.com/p/15703d8c34e9