SSL 证书

SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本;因为配置在服务器上,也称为SSL服务器证书。

SSL 证书 就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。

SSL和TLS区别是什么

SSL:安全套接字层(Secure Socket Layer)位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。 TLS:传输层安全协议(Transport Layer Security)用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。 总结:SSL有1,2,3三个版本,但现在只使用版本3,TLS是SSL的标准化后的产物,有TLS1.0 、TLS1.1、TLS1.2三个版本,TLS1.0和SSL3.0几乎没有区别,事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼,平常还是以叫SSL为多。

国密SSL证书

其实国密SSL证书所使用的算法,是我国自主研发的SM2公钥算法体系,支持SM2、SM3、SM4等国产密码算法及国密SSL安全协议。

  • 国密SSL证书在工作原理上和RSA算法的SSL证书是一样的,主要区别在于采用不同的密码算法体系。
  • 国密SSL证书和RSA算法的SSL证书在功能上都是采用自主可控密码技术保护数据机密性、完整性,实现HTTPS网站加密传输,防止数据在传输过程中被窃取或篡改,确保通信主体身份真实性、完整性。
  • 国密SSL证书的sm2采用256位密码长度,加密强度等同于3072位RSA证书在工作原理上和RSA算法的SSL证书,而RSA证书采用的是2048位密钥长度。
  • 通过SM2/RSA双证书服务帮助网站系统自适应兼容所有浏览器(同时兼容国密算法浏览器和仅支持国际算法的浏览器),兼顾国密合规和全球通用。

证书链

image.png

如图所示就是一个由根证书,中间证书,用户证书等组成一条完整证书信任链。 有一个证书机构A(根证书)A生成证书B(中间证书)B也可以生成证书C(用户证书)

image.png

自签证书

例如: JDK里面内置了一个数字证书生产工具:keytool但是这个工具只能生成自签名的数字证书。所谓自签名就是指证书只能保证自己是完整的,没有经过非法修改的。

服务器证书

就是应用证书(应用证书)由权威机构颁发的证书。

客户端证书

就是根证书用户校验服务器证书是否有效。

Http (s)

HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

HTTPS 单向交互流程:仅需一个证书和一个秘钥

  • 客户端 -> 服务端;发起请求,随机数,版本号
  • 客户端 <- 服务端;数字证书(CA颁发,包含CA私钥加密过的服务端公钥,服务端加密算法,DNS域名,数字签名等)
  • 客户端;通过内置CA公钥进行数字证书验证(包含CA公钥解密、验证数字签名、验证域名、验证有效期等,若出现不可置信等证书时可对用户作出警告是否继续连接),若验证通过。
  • 客户端 -> 服务端;发送可用算法
  • 客户端 <- 服务端;确认加密算法(一般是AES)
  • 客户端;通过第一步随机数生成随机对称密钥,使用服务端公钥(RSA)**加密 对称密钥(AES)**
  • 客户端 -> 服务端;将加密后的对称密钥给到服务端
  • 客户端 <- 服务端;服务端先用服务端私钥(RSA)解开得到对称密钥,用对称密钥加密需要发送对内容后,发给客户端

image.png

HTTPS 双向交互流程: 需要一个服务器证书一个服务器秘钥和一个根证书以及根证书颁发给客户端的客户端证书

  • 客户端 -> 服务端;发起请求,随机数,版本号
  • 客户端 <- 服务端;数字证书(CA颁发,包含CA私钥加密过的服务端公钥,服务端加密算法,DNS域名,数字签名等)
  • 客户端;通过内置CA公钥进行数字证书验证(包含CA公钥解密、验证数字签名、验证域名、验证有效期等,若出现不可置信等证书时可对用户作出警告是否继续连接),若验证通过。
  • 客户端 -> 服务端;发送可用算法 以及客户端公钥证书,服务端校验客户端证书有效性(**使用根证书校验公钥完整性以及正确性并(通过根证书)解密客户端公钥证书获取客户端公钥**
  • 客户端 <- 服务端;确认加密算法(一般是AES)发送“算法数据” 使用客户端公钥加密
  • 客户端;通过第一步随机数生成随机对称密钥,使用服务端公钥(RSA)**加密 对称密钥(AES)**
  • 客户端 -> 服务端;将加密后的对称密钥给到服务端
  • 客户端 <- 服务端;服务端先用服务端私钥(RSA)解开得到对称密钥,用对称密钥加密需要发送对内容后,发给客户端

image.png