有道无术,术尚可求,有术无道,止于术。
文章目录
- 公钥信任问题
- 数字证书
- 颁发流程
- 使用流程
- SSL数字证书
- HTTPS
- SSL/TLS 证书
- 如何申请SSL 证书
- 使用keytool 生成ssl证书
- 通信过程
公钥信任问题
之前我们使用对称、非对称加密、信息摘要、数字签名,能实现信息的完整性、加密性。但也存在安全问题。
比如A、B进行通信时,A需要将自己的公钥给对方,以便加密,如果被黑客拦截,并将黑客自己的公钥伪装为A的公钥发送给B,B收到黑客的秘钥后,误以为就是A的公钥,使用黑客的公钥加密数据发送,黑客再次拦截B发送的信息,用黑客的秘钥解密,读取原文内容,再使用A的公钥加密,发送给A。
同样B 发送给A 公钥时,也被拦截,这样黑客都有A、B的公钥,A、B获取的都是黑客的公钥,在通信时,都可以被黑客截取并获取内容,这样是非常不安全的。
以上问题是由于无法知道公钥可否可信任导致,如果第三方公证机构,对公钥进行公证,发送信息前,去机构查询当前公钥的拥有者及其他信息,则可解决这些问题。
数字证书
数字证书
是由认证机构(认证权威)颁发,包含公开密钥拥有者信息、公开密钥、签发者信息、有效期以及一些扩展信息的数字文件。
数字证书
解决公钥的信任问题,防止黑客伪造公钥。
数字证书的格式普遍采用的是X.509V3国际标准,一个标准的X.509数字证书包含以下一些内容:
- 证书的版本信息;
- 证书的序列号,每个证书都有一个唯一的证书序列号
- 证书所使用的签名算法
- 证书的发行机构名称,命名规则一般采用X.500格式
- 证书的有效期,通用的证书—般采用UTC时间格式
- 证书所有人的名称,命名规则一般采用X.500格式
- 证书所有人的公开密钥
- 证书发行者对证书的签名
颁发流程
数字证书的颁发流程如下:
- 数字证书申请人将申请数字证书所需的数字证书内容信息提供给认证机构
- 认证机构确认申请人所提交信息的正确性,这些信息将包含在数字证书中
- 由持有认证机构私钥的签证设备给数字证书加上数字签名
- 将数字证书的一个副本传送给用户
- 将数字证书的一个副本传送到数字证书数据库如目录服务,以便公布
使用流程
数字证书中,最重要的是拥有者的公钥和CA 添加的数字签名。
使用数字证书的发送信息校验流程如下:
- 小明发送加密信息并携带CA 机构颁发的数字证书
- 小红收到后,去CA机构查询当前证书是否可信
- 证书可信,使用CA机构公开的公钥,对证书进行验签
- 验签通过,说明改证书未被篡改
- 取出小明的公钥,对小明发送的信息进行验签
- 验签通过,说明小明发送的信息可信
SSL数字证书
HTTPS
HTTP协议
英文全称是Hyper Text Transfer Protocol
,翻译为超文本传输协议。
HTTPS
存在不同于 HTTP
的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。提供身份验证与加密通讯。
HTTPS协议= HTTP协议 + SSL/TLS协议 ,在HTTPS
数据传输的过程中,需要用SSL/TLS
对数据进行加密和解密。
当用户通过HTTP
协议访问网站时,客户端与服务器之间传输的数据,如账号、密码、在线交易记录等敏感信息都是明文的,这样就会存在诸如信息泄露、窃取、篡改等安全隐患。而在使用HTTPS
协议进行访问网站,客户端与服务器之间建立起SSL
加密通道,并给网站加上一把安全锁,从而防止敏感数据被窃听、泄露或篡改,保证网络数据传输的安全,确保通信数据的保密性和完整性。
SSL/TLS 证书
SSL证书
是数字证书的一种,全称是Secure Sockets Laye
r,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议
在1994年被Netscape
发明,后来各个浏览器均支持SSL
,其最新的版本是3.0。
TLS的
全称是Transport Layer Security
,即安全传输层协议,建立在SSL 3.0
协议规范之上,是SSL 3.0
的后续版本。在TLS
与SSL3.0
之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS
与SSL3.0
不能互操作。虽然TLS
与SSL3.0
在加密算法上不同,但是在我们理解HTTPS
的过程中,我们可以把SSL
和TLS
看做是同一个协议。
如何申请SSL 证书
SSL
证书由受信任的数字证书颁发机构CA
,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
阿里云、腾讯云、华为云都可以直接申请,但是看了下一年要4000多大洋。。。
使用keytool 生成ssl证书
keytool
是JDK
自带的证书工具,当然我们自己生成的不安全,所以浏览器会提示:
使用以下命令就可以生成一个证书:
keytool -genkey -alias gateway -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore scg-keystore.p12 -validity 3650
命令参数说明:
-genkey 生成秘钥
-alias 别名
-keyalg 秘钥算法
-keysize 秘钥长度
-validity 有效期(天)
-keystore 生成秘钥库的存储路径和名称
-keypass 秘钥口令
-storepass 秘钥库口令
-dname 拥有者信息,CN:姓名;OU:组织单位名称;O:组织名称;L:省/市/自治区名称;C:国家/地区代码
执行后如下图:
按照提示,依次输入,就可以看到证书了:
通信过程
- 网站向
CA
机构申请数字证书 CA
机构颁发证书给网站,使用私钥对证书进行签名,网站部署证书,提供HTTPS
访问链接- 浏览器发起
HTTPS
请求 - 网站服务端会将证书响应给浏览器
- 浏览器保存当前证书,对证书进行检查,验证其合法性
- 对证书进行验签,操作系统默认会有
CA
机构的公钥,验签通过,取出证书中网站的公钥 - 浏览器会生成一个随机值对称秘钥(客户端对称秘钥)
- 浏览器使用网站公钥将客户端对称秘钥加密,并发送网站,网站收到后,使用私钥解密,并保存客户端的公钥
- 客户端和服务端都保存了对称秘钥,这样,就可以进行加密互相传输数据了
谷歌浏览器输入https
网站,可以看到一把锁
标识,点击这把锁,可以弹出该链接是安全的提示。
点击该链接是安全的
,再点击证书有效
。
可以查看到当前网站证书中包含的基本信息和详细信息。