本文为博主原创,未经允许不得转载:
使用对称密钥的好处是解密的效率比较快,使用非对称密钥的好处是可以使得传输的内容不能被破解,因为就算你拦截到了数据,
但是没有对应的私钥,也是不能破解内容的。就比如说你抢到了一个保险柜,但是没有保险柜的钥匙也不能打开保险柜。
那我们就将对称加密与非对称加密结合起来,充分利用两者各自的优势,在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。
具体做法是:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,
这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。所以,HTTPS采用对称加密和非对称加密两者并用的混合加密机制。
常用算法
-
非对称加密算法:RSA,DSA/DSS
-
对称加密算法:AES,RC4,3DES
-
HASH算法:MD5,SHA1,SHA256
https流程图如下:
-
-
服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。
-
传送证书 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
-
客户端解析证书 这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值(密钥)。然后用证书对该随机值进行加密。
-
传送加密信息 这部分传送的是用证书加密后的密钥(随机值),目的就是让服务端得到这个密钥(随机值),以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
-
服务端加密信息 服务端用私钥解密,得到了客户端传过来的密钥(随机值),然后把内容通过该值进行对称加密。
-
传输加密后的信息 这部分信息是服务端用密钥(随机值)对称加密后的信息,可以在客户端被还原。
-
客户端解密信息
https 请求的过程中,还可以使用hash算法或签名算法
-
-
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
-
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
-
http的连接很简单,是无状态的 。
-
CA(Certificate Authority)机构 为证书颁发机构,其颁布的均为首认证可信的证书,在使用过程中浏览器不会弹出不可信错误。
SSL证书可以向CA机构通过付费的方式申请,也可以自己制作。 CA机构颁发的证书价格非常昂贵,而且有效期一般只有一年到三年不等(年数不同,价格也不同),
过期之后还要再次交钱申请,因此一般只有企业才会申请证书。
证书中主要包含:
-
证书颁发机构:用于寻找链中的下一个验证节点
-
证书的有效期:比如浏览器要根据这个值来判断证书是否已过期
-
证书申请信息:比如浏览器要判断改证书是否可用于当前访问的域名
-
公钥:用于后续和服务端通信的秘钥,这个公钥和当初生成 CSR 时的公钥是一个东西,因为只有它是和服务器的私钥是一对的
-
签名:用于验证证书内容没有被篡改
通过这种方式可以查看域名对应的证书的版本,签名算法,有效期,颁发者,使用者等等。
csdn 博客用的证书如上,其中DigiCert为顶端根证书,GeoTrust CN RSA CA G1为中间证书, *.csdn.net 为服务器证书,
当你点击对应的证书,会显示颁发者之间的关系,这种关系便形成证书链。如下图所示:
在证书链中,通常分三级结构,根证书,中间证书和服务器实体证书,正确的证书链顺序中服务器实体证书处在最底端,里面包含了些服务器域名,
服务器公钥和签名值等。服务器证书上一级是中间证书,中间证书就是上面提到的由权威CA机构授权的二级机构,可以由它来签发服务器证书。
中间证书可以是由多张证书组合在一起,最上级的是根证书,也就是CA机构,对服务器身份进行校验时,需要验证一整个证书链,
由于浏览器中集成了权威CA机构的根证书,因此主要是校验中间证书和服务器实体证书的签名值是否正确。
校验服务器身份需要验证整个证书链,从服务器实体证书开始,服务器实体证书的签发者是上一级中间证书的使用者,中间证书的签发者是上一级根证书的使用者。
每一级证书都有签名值,根证书使用自己的根CA公钥验证自己的签名,也用来验证中间证书的签名值,中间证书的公钥用来验证下一级的服务器实体证书签名值,以此构成一条信任链。