? ? ? ?
????????首先要明确一下几个概念,加密,数字签名,和数字证书。加密分为对称加密和非对称加密。其中对称加密,双方使用同一个密钥进行加解密。存在的问题是在第一次与陌生人进行通信时,如何安全的传递密钥。而非对称密钥,双方使用不同的密钥进行加解密。通信时,使用公钥进行加密,而使用私钥进行解密。因为私钥是不传输的,所以就解决了密钥传输的安全问题。同时,公钥私钥可以进行身份认证,实现数字签名。具体如下
- 对消息内容进行哈希计算,得到hashcode,利用私钥对hashcode进行加密
- 可以标识身份,因为私钥唯一,公钥与私钥是一对,公钥能解密成功,证明消息的发送方一定是私钥的持有者
- 可以校验消息的一致性,消息和数字签名一同发送给接收方,如果消息被篡改,hashcode和数字签名中保存的hashcode不一样,数字签名中的hashcode无法修改,否则解密不会成功
通过数字签名,能够让公钥的持有方确认数据的完整性和可靠性(确实从私钥持有方发送的)但在与陌生人第一次建立通信时,如何确认收到的公钥是对方发送的,而不是通信被截获之后伪造的。(比如:我想访问B网站,但是请求被截获,C网站伪造了一个公钥发给了我,然后我就用这个公钥加密我的隐私数据,发送给C网站,C网站就用它的私钥进行了解密获取个人信息)。此时我们就需要数字证书,来确认公钥的身份验证。因为数字证书的是由权威机构颁布的,这个证书中所包含的公钥是被认证过的公钥,我们只需要验证证书的真伪,而公钥的真伪则交给了CA担保。证书的真伪是通过CA证书的数字签名来确保的,用事先已经存储在客户端的CA公钥,进行CA的数字签名确认。
CA(certification authority)颁发数字证书的权威机构,来创建CA证书,包含了以下信息:
1.证书所有者信息:
主题(Subject):证书所有者的身份信息,可能包括个人、组织、设备或服务的名称,以及其他区分信息,如组织单位、地理位置等。
2.证书颁发机构信息:
颁发者(Issuer):签发和认证证书的证书颁发机构(CA)的名称。
3.公钥:
公钥(Public Key):与证书所有者的私钥相对应的公钥,用于数字签名的验证和信息的加密。
4.证书有效期:
有效期(Validity Period):证书的有效开始日期和结束日期,标志了证书的有效使用时间范围。
5.证书序列号:
序列号(Serial Number):CA分配给证书的唯一编号,用于唯一标识证书。
6.签名算法:
签名算法(Signature Algorithm):用于CA签名证书的算法,例如SHA-256和RSA组合。
7.CA的数字签名:
CA的数字签名(CA's Digital Signature):CA使用其私钥对证书信息进行签名的结果,用于证明证书的真实性。
8.证书扩展(可选):
????????密钥使用(Key Usage):说明了证书中的公钥应如何使用,例如用于数据加密、数字签名、证书签名等。
????????扩展密钥使用(Extended Key Usage, EKU):更具体地描述了公钥的预期用途,例如用于服务器认证、客户端认证、代码签名等。
????????主题备用名称(Subject Alternative Name, SAN):允许为证书主题指定多个名称,如多个域名或IP地址。
????????CRL分布点(CRL Distribution Points):提供了检查证书撤销状态的在线资源位置,如证书撤销列表(CRL)或在线证书状态协议(OCSP)服务器的UR
client向server发送请求;
server向client下发CA证书;
client比较证书中所有者的信息与正在访问的服务提供者的信息是否一致,确认公钥的身份一致性;
client校验证书是否为合法机构颁发,确认公钥的真实性;
client生成一个随机值(对称密钥),然后用证书中的公钥对该对称密钥加密;
server利用非对称私钥解密client发送的信息,从中得到对称密钥;
之后server和client就可以通过对称密钥进行信息交互。
证书格式
从分类标准上分,SSL 证书格式主要有:????????公钥证书格式标准 X.509 中定义的 PEM 和 DER
????????公钥加密标准 PKCS 中定义的 PKCS#7 和 PKCS#12
????????Java环境专用的 JKS
从文件格式上分,SSL 证书格式主要有:????????一种是 Base64 (ASCII) 编码的文本格式。这种证书文件是可以通过文本编辑器打开,甚至进行编辑,常见有 PEM 证书格式,扩展名包括 PEM、CRT 和 KEY。
????????另外一种是 Binary 二进制文件。常见有 DER 证书格式,扩展名包括 DER 和 CER。
? ? ? ? PKI( Public Key Infrastructure ,公钥基础设施)所有与数字证书相关的概念与技术的统称。PKI 的核心是在客户端、服务器和证书颁发机构 (CA) 之间建立的信任。下图例举出了 ,Authentication 和 Certification 的差别,(双方和三方的区别)
? ? ? ?SSL(Secure Sockets Layer,安全套接字层)是一种安全协议,用于在互联网上建立加密链接,保护在网络之间传输的数据的安全性和完整性。SSL通过在服务器与客户端之间的通信上实施加密和身份验证来确保数据的私密性和防止数据被篡改。(https,ftps,vpn)
? ? ? ?TLS(Transport Layer Security,传输层安全协议)TLS 是 SSL 的不兼容增强版。逐渐取代SSL协议。SSL 与 TLS 两者所使用的算法是不同的,同时 TLS 增加了许多新的报警代码。在认证证书时 TLS 必须与 TLS 之间交换证书, SSL 必须与 SSL 之间交换证书。
SSL工作原理:服务器和客户端,首先会进行加密参数协商。
? ? ? ?step1.客户端Hello(ClientHello)
????????客户端向服务器发送“ClientHello”消息,其中包含客户端支持的TLS版本、提议的加密套件列表(加密算法和密钥交换方法的组合)、一个客户端生成的随机数(Client Random),以及一个新的扩展,名为“key_share”,其中包含客户端的Diffie-Hellman公钥参数。
? ? ? ?step2.服务器Hello(ServerHello)
????????服务器选择一个客户端也支持的加密套件,并发送“ServerHello”消息回客户端,消息中包含服务器的随机数(Server Random)和服务器的Diffie-Hellman公钥参数。
? ? ? ? step3.服务器发送证书(Server Certificate)
????????服务器发送其SSL证书给客户端。这个证书包括服务器的公钥和由证书颁发机构(CA)对该公钥的签名。客户端使用CA的公钥来验证证书的真实性。
? ? ? ? step4.服务器完成(Server Finished)
?????????服务器发送一个“Finished”消息,该消息包含对前面所有握手消息的加密散列,以确保握手过程的完整性和安全性。
? ? ? ? step5.客户端密钥交换
????????如果服务器要求客户端认证,客户端将会发送自己的证书和证书验证消息。
? ? ? ? step6.客户端完成(Client Finished)
????????客户端发送一个“Finished”消息,同样包含对前面所有握手消息的加密散列。
????????在TLS 1.3中,一旦客户端和服务器交换了它们的“Finished”消息,就认为握手完成了,双方可以开始加密通信。客户端和服务器使用会话密钥对通信内容进行加密和解密。这确保了数据的机密性和完整性。