参考文章: https://www.jianshu.com/p/dc31bb2e51f1
https://www.jianshu.com/p/bad8a99de24c
1. 基础知识
-
SSL:一般情况下,网站使用的都是明文方式传输数据,但是在涉及到一些隐私信息时(如银行交易),这个时候网站就会跳转到 SSL,SSl的功能就是提供加密数据。这样的话,TCP/IP协议只要做好的自己的事情,数据加密就全权委托给SSL协议完成
-
TLS:TLS是对SSL的扩展和优化,他可以提供数据安全的同时,确保数据的完整性
-
HTTPS:超文本传输安全协议。就是http+ssl/tls,可以理解为安全版http
-
对称加密:对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据
-
非对称加密:使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密
-
证书认证:个人生成的公钥和私钥是不被信任的,只有经过CA认证后后才会被认为是可信任的密钥。目前大多浏览器都内置了国际知名CA的根证书中心,如果我们的密钥被CA中心签名过,那么就是合法的数字证书。但其CA验证密钥过程复杂,所以很多人使用自签名的数字证书
非对称加密使用的是公钥加密和私钥解密机制
2. 图解https的传输过程
- 客户端发起https请求,连接到服务端的443端口
- 服务端采用的https有一套数字证书,这个证书可以自己配置,也可以像证书管理组织申请,证书的本质是公钥(发给任何人)和私钥(服务端保留)
- 服务端将公钥传送证书传递给客户端,证书中包含了很多信息,比如证书的颁发机构,过期时间,网址,公钥等
- 客户端解析证书,由客户端的TLS完成,首先会验证公钥是否有效,比如颁发机构,过期时间等。如果有异常,就会弹出警告信息。(这个我们上网应该遇到过,一般都是提示说该网站的证书不可信任,是否继续等)。证书没问题后会随机生成随机值(这个很重要,用于对称加密),然后使用第三步中的证书对这个随机值进行非对称加密
- 将证书非对称加密后的随机值传到服务器
- 服务器使用私钥对其进行非对称解密后,得到客户端的随机值,然后把内容通过该随机值进行对称加密
- 服务端将对称加密后的信息发给客户端
- 客户端用之前的生成的随机值来进行对称解密,获取内容明文
3. CA
SSL/TLS 工作流-图二CA: 证书授权中心 (certificate authority)。 它呢,类似于国家出入境管理处一样,给别人颁发护照;也类似于国家工商管理局一样,给公司企业颁发营业执照。
它有两大主要性质:
- CA 本身是受信任的 // 国际认可的
- 给他受信任的申请对象颁发证书 // 和办理护照一样,要确定你的合法身份,你不能是犯罪分子或造反派。
当然,你需要被收保护费,同时,CA 可以随时吊销你的证书
- 给他受信任的申请对象颁发证书 // 和办理护照一样,要确定你的合法身份,你不能是犯罪分子或造反派。
3.1 CA证书详细的工作流
1)申请认证:服务器需自己生成公钥私钥对 pub_svr & pri_svr,同时根据 pub_svr 生成请求文件 csr, 提交给 CA,csr 中含有公钥、组织信息、个人信息 (域名) 等信息。(图二中 server.req 就是 csr 请求文件)
2)审核信息:CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等。
3)签发证书:如信息审核通过,CA 会向申请者签发认证文件 - 证书。 证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。 签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名。(图二中生成 server.crt)
4)返回证书:client 如果请求验证服务器,服务器需返回证书文件。(图二中 handshake 传回 server.crt
5)client 验证证书:client 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法。客户端然后验证证书相关的域名信息、有效时间是否吊销等信息。 客户端会内置信任 CA 的证书信息 (包含公钥),如果 CA 不被信任,则找不到对应 CA 的证书,证书也会被判定非法。(图二中 check 可选,我们可以选择不验证服务器证书的有效性)
6)秘钥协商:验证通过后,Server 和 Client 将进行秘钥协商。接下来 Server 和 Client 会采用对称秘钥加密。(对称加密时间性能优)(图二中 pre-master/change_cipher_spec/encrypted_handshake_message 过程)
7)数据传输:Server 和 Client 采用对称秘钥加密解密数据。
3.2 创建一个自签名的SSL证书(X509)
略
网友评论