大家好,又见面了,我是你们的朋友全栈君。
前言
HTTPS 通过 TLS/SSL 协议实现 HTTP 的加密安全传输。而 TLS/SSL 协议主要依赖三种算法实现安全功能:
- 非对称加密:实现身份认证和密钥协商
- 对称加密:对数据加密
- 散列函数:验证信息的完整性
对称加密和非对称加密以及签名可以参考 这篇文档
HTTPS 使用的是 对称加密和非对称加密 结合的方式。具体的做法是:
发送信息的一方(客户端)使用服务端的公钥加密 "对称密钥",服务端使用私钥解密拿到 "对称密钥"。这样可以确保 "对称密钥" 的传输过程是安全的
,后续就可以使用 “对称密钥” 进行数据加密传输。
数字证书认证的具体流程
- 向第三方机构 CA 提交服务器公钥、组织信息、个人信息(域名)等信息并申请认证。(实际操作中,往往需要提供私钥,它会自动从私钥中提取公钥)
- CA 通过多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等。如信息审核通过,CA 会向申请者签发认证文件-证书。
证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。 其中签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名。 - 客户端向服务端发出请求时,服务端返回证书文件。
客户端读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性。
客户端还会验证证书相关的域名信息、有效时间等信息; 客户端会内置信任 CA 的证书信息(包含公钥),如果 CA 不被信任,则找不到对应 CA 的证书,证书也会被判定非法。
HTTPS 工作流程
1.客户端发起一个 HTTPS 请求。
2.服务端把配置好的证书返回给客户端。
3.客户端验证证书:比如是否在有效期内,证书的用途是不是匹配 Client 请求的站点,是不是在 CRL 吊销列表里面,它的上一级证书是否有效等
4.客户端使用伪随机数生成对称密钥,并通过证书里服务器的公钥进行加密。后续使用该对称密钥进行传输信息。
5.服务端使用自己的私钥解密这个消息,得到对称密钥。至此,客户端和服务端都持有了相同的对称密钥。
6.服务端使用对称密钥加密“明文内容 A”,发送给客户端。
7.客户端使用对称密钥解密响应的密文,得到“明文内容 A”。
8.客户端再次发起 HTTPS 的请求,使用对称密钥加密请求的“明文内容 B”,然后服务器使用对称密钥解密密文,得到“明文内容 B”。
以此保持加密通信。
参考文档:https://github.com/ljianshu/Blog/issues/50
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125946.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...