zoukankan      html  css  js  c++  java
  • HTTPS加密传输与CA证书

    HTTPS

    HTTP协议采用明文传输信息,存在信息窃听、信息篡改的风险,而TLS/SSL协议具有身份验证、信息加密和完整性校验的功能,可以保证数据得安全性。

    HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTPS主要作用是:

    1. 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全
    2. 对网站服务器进行真实身份认证,避免中间人伪造服务端身份。

    SSL/TLS

    TLS/SSL(安全传输层协议Transport Layer Security)是介于TCP和HTTP之间的一层安全协议。ssl基本工作方式是,服务器使用非对称加密与客户端进行通信,将公钥发送给客户端,客户端生成对称加密使用的密钥, 然后对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同的客户端使用的对称密钥不同,从而可以保证每个客户端和服务器之间通信信息只能有双方获取。

    TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密。

    • 散列函数验证信息的完整性
    • 非对称加密实现身份认证和密钥协商
    • 对称加密算法采用协商的密钥对数据加密

    散列函数hash

    常见的有 MD5、SHA1、SHA256,该类函数特点是函数单向不可逆、对输入非常敏感、输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信息篡改并验证数据的完整性; 在信息传输过程中,散列函数不能单独实现信息防篡改,因为明文传输,中间人可以修改信息之后重新计算信息摘要,因此需要对传输的信息以及信息摘要进行加密;

    对称加密

    常见的有AES-CBC、DES、3DES、AES-GCM等,相同的密钥可以用于信息的加密和解密,掌握密钥才能获取信息,能够防止信息窃听,通信方式是1对1; 对称加密的优势是信息传输1对1,需要共享相同的密码,密码的安全是保证信息安全的基础,服务器和 N 个客户端通信,需要维持 N 个密码记录,且缺少修改密码的机制;

    非对称加密

    即常见的 RSA 算法,还包括 ECC、DH 等算法,算法特点是,密钥成对出现,一般称为公钥(公开)和私钥(保密),公钥加密的信息只能私钥解开,私钥加密的信息只能公钥解开。因此掌握公钥的不同客户端之间不能互相解密信息,只能和掌握私钥的服务器进行加密通信,服务器可以实现1对多的通信,客户端也可以用来验证掌握私钥的服务器身份。 非对称加密的特点是信息传输1对多,服务器只需要维持一个私钥就能够和多个客户端进行加密通信,但服务器发出的信息能够被所有的客户端解密,且该算法的计算复杂,加密速度慢。

    HTTPS通信过程

    服务端申请CA证书

    服务方向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证,CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等。

    如信息审核通过,CA会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名,该签名使用散列算法根据以上的明文计算出, 然后使用私钥对该sign值加密,加密后,客户端可以通过内置的CA机构公钥验证该sign值,而该sign值只能是CA机构的私钥生成的,才能通过客户端的验证,由此该证书不可能被其他的中间人伪造或更改数据。

    客户端与服务端通信建立过程

    1.客户端向服务器发出请求时,服务器返回证书文件;
    2.客户端读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用内置根证书中的对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
    3.客户端验证证书相关的域名信息、有效时间等信息;

    4.客户端生成一对对称密钥,并使用服务端生成的公钥进行加密,发送到服务端。

    5.双方使用该对称加密方式进行通信。

    CA机构的作用

    CA机构的作用就要从没有CA机构证书风险说起。

    服务器想与客户端进行加密连接,必然需要协商加密密钥信息,而无论是使用对称加密或者是非对称加密的方式,一旦有中间人拦截了数据包,就可以获取密钥信息。

    • 如果直接是使用对称加密,中间人获取到密钥,在每次传输数据时候,直接拦截一方的数据,使用密钥解密,篡改,再加密发送而另外一端,接收方无从得知该数据是否被修改。
    • 如果使用上面的使用非对称加密的方式,即:服务端生成一对公私钥,将公钥发送给客户端,然后由客户端生成一对对称密钥发送给服务器的方式。此时中间人同样可以拦截拦截服务器的公钥,使用该公钥生成一对对称密钥与服务端通信,这样中间人与服务器的连接建立了,且无服务器不知情,随后中间人生成一对自己的公私钥,将公钥发送给客户端,由客户端生成一对对称密钥,发送给中间人(客户端以为公钥是服务器的,生成密钥后发送给服务器,而实际上被中间人拦截),中间人通过私钥解密出客户端的对称密钥,至此中间人与客户端的连接建立,客户端同样不知情。客户端和服务器进行通信时,双发的数据都需要经过中间人转发,而在转发过程中可以随意的对数据进行篡改,接收方同样无法得知。

    以上问题的出现是介于服务端和客户端均无法知道与自己通信的对象是否是安全的,也就是无法对对方身份进行识别,哪怕有一方能够识别出身份问题,就可以得知本次连接时不安全的。于是有了CA第三方权威机构。

    CA机构的主要工作之一就是实现服务器端的身份的验证,保证服务端在于客户端建立加密连接的过程中不会被其他中间人在双方不知情的情况下进行拦截后篡改信息。也就是说,即使中间人对拦截了服务器发送给客户端的公钥信息,并获取CA机构公钥解密得到了服务器的公钥,同上面的方式一样,中间人可以与服务器建立有效的连接。但是中间人却无法通过客户端的验证,中间人没有CA机构私钥,无法生成可以被CA机构公钥解密的证书信息,也就无法伪装成客户端的服务器。因此连接无法建立。

    证书结构

    明文信息:基本信息,包括公钥、组织信息、个人信息(域名),签发机构,有效时间,认证服务端域名等信息
    签名:使用散列算法计算出上面明文信息的签名值sign,然后使用私钥对该sign值加密,加密后,客户端可以通过内置的CA机构公钥验证该sign值,而该sign值只能是CA机构的私钥生成的,才能通过客户端的验证,由此该证书不可能被其他的中间人伪造或更改数据。

     

    证书链

    如果证书签发机构为CA根证书机构,客户端直接使用内置的根证书公钥即可解密根证书,获取并验证证书信息正伪。

    CA根证书签发机构也可以指定一个中间机构作为证书的颁发机构,根机构提供给该中间机构一个中间证书来证实中间机构的合法性。获取中间证书需要该中间机构需要生成一对公私钥,然后提供自己机构信息,以及公钥给CA根机构,得到该中间证书。之后中嘉案机构就可以使用自己私钥为需要认证服务器颁发服务器证书,同时出示自己的中间证书给服务器。

    客户端获取到服务器端提供的中间证书和服务器证书后,首先会验证中间证书,因为中间证书由CA根证书机构的私钥加密,而客户端内置了对应的公钥,所有可以验证该中间证书是否是可信,并从该中间证书机构的公钥,而服务器证书由中间机构使用私钥进行加密,由此可以从中间证书中获取的公钥验证服务器证书的合法性,并获得服务器端生成的公钥,有了该公钥,就可以与服务器协商对称加密算法。

    根证书,中间证书与服务器证书在一起组合成一条合法的证书链,证书链的验证是从根CA机构开始自下而上的信任传递的过程。

    证书链有以下特点:

    • 同一本服务器证书可能存在多条合法的证书链。服务器证书可以由被根机构信任的B机构或者是C机构颁发。由此可以得到server-B-root和server-C-root的证书链。
    • 不同证书链的层级不一定相同。一般证书链在4层以内,这样不会影响性能。

    使用中间证书主要有以下的优点:

    • 服务器证书可以由任意一个根机构认证的中间机构颁发,减少根证书机构的管理工作量,可以更高效的进行证书的审核与签发。
    • 根机构只需要使用自己的私钥认证中间机构即可,然后使用中间机构的私钥认证服务器。这样根机构的私钥使用更少,更加的安全,如果根机构私钥泄露,吊销过程十分困难,无法及时补救,而中间机构
    • 则可以快速在线吊销,并重新为用户签发新的证书
    • 证书链四级以内一般不会对 HTTPS 的性能造成明显影响。

    参考文章:https://juejin.im/post/5af557a3f265da0b9265a498#heading-37

  • 相关阅读:
    搭建自己的 github.io 博客
    转:华为副总裁一封信:透露年薪千万的工作感悟,太震撼了!
    SNF开发平台WinForm之五-高级查询使用说明-SNF快速开发平台3.3-Spring.Net.Framework
    SNF开发平台WinForm之四-开发-主细表管理页面-SNF快速开发平台3.3-Spring.Net.Framework
    SNF开发平台WinForm之三-开发-单表选择控件创建-SNF快速开发平台3.3-Spring.Net.Framework
    SNF开发平台WinForm之二-开发-单表表单管理页面-SNF快速开发平台3.3-Spring.Net.Framework
    SNF开发平台WinForm之一-开发-单表表格编辑管理页面-SNF快速开发平台3.3-Spring.Net.Framework
    C#基础总结之八面向对象知识点总结-继承与多态-接口
    C#基础总结之七面向对象知识点总结1
    C#基础总结之六 DataTable (临时表/数据源) 和Datatable 名片练习
  • 原文地址:https://www.cnblogs.com/k5210202/p/13342208.html
Copyright © 2011-2022 走看看