数字证书是Https实现安全传输的关键,它是由权威的CA机构颁布。如上图GeoTrust
便是一个CA机构。证书的主要内容包含如下几点:公钥、证书发布机构、证书持有者、证书有效期、签名算法、指纹
和指纹算法
。
在网络传输中,要想实现自己的数据能够安全的传输,需要对请求数据进行加密。这样即使被数据包被截取,数据也不会被泄漏。
加密算法
对称加密:加密使用的秘钥和解密使用的秘钥是相同的。特点是:算法公开、计算量小、加密速度快、加密效率高。算法一般为:
DES
。非对称加密:需要两个密钥:公钥和私钥。公钥和私钥是一对。公钥顾名思义是可以被公开的。用法一般是公钥加密,私钥解密;私钥签名,公钥延签;特点是:保密性好,但是算法强度复杂。算法一般为:
RSA
。
证书结构
该证书是CA机构
颁发给申请者
的。
在网络传输中,若直接传输对称加密的秘钥。请求被拦截后,密钥也会泄露,造成信息泄露。所以HTTPS首先采取非对称加密方式,将公钥传输给浏览器。同时还会携带一些其他信息(这些信息组成证书)。
如下图所示,证书中使用者
字段包含的内容时*.csdn.net
,这个字段可以让浏览器供浏览器进行验证。(浏览器可以判定是否是目标服务器发送的证书,而非三方服务器发送的证书)。
服务器将该证书发送给浏览器的。
根证书
浏览器内置CA机构
为自己颁发的证书
。即根证书。
谷歌浏览器:设置-->高级-->管理证书--->受信任的根证书颁发机构
根证书是浏览器内置的。根证书中携带的是CA的根公钥。而根私钥是绝对保密的。
https认证流程
CA机构颁发给申请者的CA证书中,存在一个指纹
属性,该属性可以理解为证书身份的唯一标识。
指纹:证书信息经过指纹算法sha1计算出hash值,然后使用根密钥进行加密。
- https建立的过程。浏览器会收到一个证书。
- 浏览器验证收到的证书,判断是否
信息被篡改
或证书被替换
。
2.1 判断证书是否受信任:根据证书内容去浏览器寻找根证书。若未找到根证书,代表此机构是不受信任的,此时浏览器会警告用户。
2.2 判断证书是否被篡改:若找到根证书后,会在根证书中获取根公钥
,然后去解密收到的证书指纹
。获取到指纹中的hash值,然后根据收到证书的内容再次生成一个hash值,判断信息是否被篡改。
2.3 判断证书是否被替换:若信息未被篡改,则验证是否为目标服务器发送的证书
,检查证书的<使用者>属性是否和我们请求的url相同。 - 若证书验证成功,那么浏览器就可以确定该证书是目标服务器发送的,于是生成一个
对称加密的密钥
,使用收到证书的<公钥>进行加密。然后发送给服务器。 - 即使加密串被拦截,但是拦截者没有私钥,信息不会被泄漏。目标服务器收到加密串后,使用私钥解密,获取到对应的密钥。
- 而后浏览器和服务器使用对称加密进行数据传输。