有道无术,术尚可求,有术无道,止于术。
之前我们使用对称、非对称加密、信息摘要、数字签名,能实现信息的完整性、加密性。但也存在安全问题。
比如A、B进行通信时,A需要将自己的公钥给对方,以便加密,如果被黑客拦截,并将黑客自己的公钥伪装为A的公钥发送给B,B收到黑客的秘钥后,误以为就是A的公钥,使用黑客的公钥加密数据发送,黑客再次拦截B发送的信息,用黑客的秘钥解密,读取原文内容,再使用A的公钥加密,发送给A。

同样B 发送给A 公钥时,也被拦截,这样黑客都有A、B的公钥,A、B获取的都是黑客的公钥,在通信时,都可以被黑客截取并获取内容,这样是非常不安全的。

以上问题是由于无法知道公钥可否可信任导致,如果第三方公证机构,对公钥进行公证,发送信息前,去机构查询当前公钥的拥有者及其他信息,则可解决这些问题。
数字证书是由认证机构(认证权威)颁发,包含公开密钥拥有者信息、公开密钥、签发者信息、有效期以及一些扩展信息的数字文件。
数字证书解决公钥的信任问题,防止黑客伪造公钥。

数字证书的格式普遍采用的是X.509V3国际标准,一个标准的X.509数字证书包含以下一些内容:
数字证书的颁发流程如下:

数字证书中,最重要的是拥有者的公钥和CA 添加的数字签名。
使用数字证书的发送信息校验流程如下:

HTTP协议英文全称是Hyper Text Transfer Protocol,翻译为超文本传输协议。
HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。提供身份验证与加密通讯。
HTTPS协议= HTTP协议 + SSL/TLS协议 ,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密。

当用户通过HTTP协议访问网站时,客户端与服务器之间传输的数据,如账号、密码、在线交易记录等敏感信息都是明文的,这样就会存在诸如信息泄露、窃取、篡改等安全隐患。而在使用HTTPS协议进行访问网站,客户端与服务器之间建立起SSL加密通道,并给网站加上一把安全锁,从而防止敏感数据被窃听、泄露或篡改,保证网络数据传输的安全,确保通信数据的保密性和完整性。
SSL证书是数字证书的一种,全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。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 证书由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
阿里云、腾讯云、华为云都可以直接申请,但是看了下一年要4000多大洋。。。

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 网站,可以看到一把锁标识,点击这把锁,可以弹出该链接是安全的提示。

点击该链接是安全的,再点击证书有效。

可以查看到当前网站证书中包含的基本信息和详细信息。
