HTTPS

作者: Superwind20 | 来源:发表于2017-02-24 23:45 被阅读34次

    最近搞安全相关的内容,参阅了相关资料,整理了下相关知识,算是旧事重题。

    https

    Https就是Http跑在SSl或者TLS上,所以我们讨论的原理和流程其实是SSL和TLS的流程。

    由于采用了加密通讯,Https无疑要比Http更耗费服务器资源,这也是很多公司明明支持Https却默认提供Http的原因。

    https涉及到的主体

    1. 客户端。通常是浏览器(Chrome、IE、FireFox等),也可以自己编写的各种语言的客户端程序。

    里面包括受信任的CA证书列表

    2. 服务端。一般指支持Https的网站,比如github、支付宝。

    里面包括服务端私钥,CA证书(包括服务端公钥)

    3. CA(Certificate Authorities)机构。Https证书签发和管理机构,比如Symantec、Comodo、GoDaddy、GlobalSign。

    里面包括根证书、自签名证书

    发明https的动机

    1. 认证,例如,客户端访问支付宝,要认证所访问的就是支付宝而不是钓鱼网站。

    2. 保证所传输数据的私密性和完整性。

    https的工作流程

    1. 认证服务器。浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。客户端发起请求给服务端,服务端会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么客户端就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。

    2. 协商会话密钥。客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。

    协商会话密钥的过程是:客户端随机生成RSA公私钥、会话密钥。客户端使用服务端公钥加密{客户端公钥、客户端会话密钥}并发给服务端。服务端使用私钥解密。服务端随机生成会话密钥。服务端使用客户端公钥加密{服务端会话密钥}。客户端使用私钥解密。

    3. 加密通讯。此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。

    使用https的流程

    1. 使用OpenSSL等工具生成服务器私钥

    2. 使用OpenSSL等工具,结合服务器私钥、其他服务器信息等,生成证书请求CSR文件

    3. 将CSR文件发送给GlobalSign等CA结构,支付相应的费用,获得CA机构颁发的服务证书

    4. 在服务端配置https服务

    https的问题说明

    1. SSL是对传输的数据进行加密,针对的是传输过程的安全,Firebug和postman之类的浏览器调试工具得到的是客户端加密之前/解密之后的数据,因此是明文的

    2. 自签名证书就是自己生成的证书,并不是官方生成的证书,除非是很正式的项目,否则使用自己签发的证书即可,因为官方生成证书是要花钱的。

    相关文章

      网友评论

          本文标题:HTTPS

          本文链接:https://www.haomeiwen.com/subject/fhrgwttx.html