上一篇说过,数字签名并不能防止中间人攻击,这下就要看数字证书了。
数字证书是一个由可信的第三方发出的,用来证明公钥拥有者的信息以公钥的电子文件。
我们来总结一下前几篇的内容:
A 想要把一个带数字签名的文件传递给 B 。于是 A生成了公钥和私钥,用私钥签署了文件(数字签名)。然后把公钥上传到一个公共服务器上。如果一切顺利,那 B去下载这个公钥,然后就可以验证签名(公钥解密),确认文件的确是 A 发出的,同时没有被篡改过。但是这里的安全漏洞是明显的,那就是 B无法确认她下载的公钥是不是真的是 A 的。这就给所谓的“中间人攻击”提供了可能。假设在 A 的文件还没有到达 B之前,黑客X发起了中间人攻击,删除 A 的文件,然后签署一个假文件发送给 B ,B收到后去公共服务上下载的公钥其实也被黑客替换过的,她用这个公钥去验证了签名,自认为文件就是 A发出的,所以被骗了。其实问题就出在公钥本身没有办法证明自己的主人是谁。 所以要避免中间人攻击,就要证明公钥属于它真正的主人,那么需要使用数字证书。
A 签名文件之后,给 B 发送时附上自己的证书。B 收到证书之后,就可以信任证书中的公钥的确就是 A 的了。有了这个公钥,可以验证文件附带的数字签名是 A 的。数字签名没问题,就保证了文件是没有被篡改过的。至于 B 如何确认证书本身是可信的,稍后我们聊 HTTPS 的过程中再展开聊。
CA就是认证中心的简称。
就像公安局发身份证一样。A向认证中心CA发送他的个人信息和公钥,然后CA把A的个人信息和公钥打包在数字证书里,然后CA也会准备好非对称密钥,CA用自己的私钥对数字证书加密生成数字签名,接着把这个数字签名也放到证书里,这就生成了A的数字证书。
一份典型的数字证书包含如下内容。首先是发证机构 CA。第二个是所有人姓名,例如我的名字lcy。第三个是我的公钥,以及公钥的过期时间。最后一项就是 CA 的数字签名。(当然还会有其他东西,可以在mac电脑地址栏的小锁上查看证书)数字签名是 CA 发出的,也就是说 CA 用自己的信用为这个证书做担保。第二点,证书上同时带有所有人信息和公钥,数字签名保证了证书是不可篡改的,所以说,只要大家信任 CA ,就可以信任所有人和公钥之间的绑定关系。所有Root CA的公钥是内置在系统的,每台机器都会有。
数字证书就是第三方机构发行的证书,主要作用就是证明你的公钥的确是属于你的
要申请就要有请求,CSR(Certificate Signing Request)是证书签名请求文件,包含了你的服务器信息和公司信息。申请证书时需要将你证书的CSR文件提交给CA认证中心审核,CA中心对CSR文件进行根证书私钥签名后会生成证书公钥文件(即签发给你的证书)。
既然有了数字证书的概念,那么接下来的通信也就必须要有数字证书了,没有数字证书的消息直接丢弃即可。
因为CA会实名颁发信息,X想假冒A直接发送数字证书是不可能的了,那么X就只有尝试去篡改。但是篡改公钥之后因为X没有CA的私钥,无法生成CA的数字签名,所以X也没法篡改。
数字证书就这样能防止假冒和篡改。
但是数字证书的需要CA数字签名,而数字签名前面也说过有漏洞,万一别人黑掉了CA可怎么办啊,那样计算机内置的CA公钥变成了黑客的公钥,这样的话,黑客自己数字签名被黑客自己公钥验证,这就攻击成功了。
其实在CA的上面,还有更高级的CA。下面我们来看看证书链。
上级的CA会给下级的CA数字签名,做成一个证书,证书里面是下级CA的资料和下级CA的公钥。
X如果想要攻击CA,那么需要将2个CA都攻击,一一处理掉他们的签名,用X自己的签名去替换,攻击流程和上面所说的相同,这已经很困难了。
而在上级CA的上面还有更高级的CA给它数字签名,直到最后出现根认证中心RCA(Root CA),RCA会采取一系列的防护措施防止攻击。
几乎没人可以黑到RCA的,RCA可以自签名,甚至不同的RCA之间会互相签名,这样整个体系就更安全了。
这里的封装其实就是为了解决密钥分配问题。密钥封装的目的是为通信双方安全地交换对称密钥,之后采用对称密钥加密信息。
自签名证书 mac
windows
下面的文章可以作为扩展阅读,介绍了apple开发者申请证书的流程。 Apple开发者账号介绍及证书配置说明
HTTPS 就是安全的 HTTP 的意思,是一套用在浏览器和服务器之间通信的协议。
使用了 HTTPS 后,浏览器跟服务器之间所有的通信内容都是加密过的。 HTTPS=HTTP+SSL
SSL 证书就是用在 HTTPS 条件下的数字证书,由可信的第三方 CA 来颁发。只不过验证的不是人的身份,而是服务器的身份和它的公钥之间的关系,目的是建立浏览器和服务器之间的信任。
比如用浏览器来访问百度服务器。要建立"安全通道",第一步是服务器要传递公钥到浏览器,但是服务器传递过来的公钥如果过程中被篡改过,那么后续的加密通信也就全无安全性可言了。
所以百度需要先去 CA 机构申请 SSL 证书,放到自己的服务器上。这样在浏览器中输入百度的网址,百度那边会首先给浏览器发送 SSL 证书。
注意,各个浏览器中都内置了对全球各大 CA 机构的验证机制,底层的原理就是拥有 CA 们的公钥,可以验证证书上 CA 的签名。
如果证书没有问题,浏览器就可以断定证书中携带过来的公钥就是百度的。
这时候浏览器会生成一个对称秘钥,发送给百度服务器。
然后百度拥有了浏览器的加密秘钥,可以用对称加密的思路来跟浏览器通信了,这样一个双向的加密通信通道也就开通了。
对称加密的加密效率要比非对称高,所以大量数据的传递首选对称加密。