签名/证书/CA
公钥私钥
是概念上的区分,发出去的为公钥,自己手上的为私钥,实际生成RSA秘钥时,其中一份包含另一份的完整信息成为私钥,且公私钥都可以做加密方和解密方
CA
CA是证书的签发机构,被称为证书授权中心,它是公钥基础设施(Public Key Infrastructure,PKI)的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。CA 拥有一个证书(内含公钥和私钥)
**根证书:**是CA认证中心给自己颁发的证书,是信任链的起始点,安装根证书意味对这个CA认证中心的信任
证书
采用第三方(CA证书商)担保,确保证书中发出来的公钥是服务器提供的,在用证书中服务器的公钥加密信息与服务器通信
证书颁发过程
>1.服务器把公钥和个人信息发送给证书商CA,证书商用私钥对其签名,形成CA证书,确保证书内的公钥是服务器提供的 >2.证书商把CA证书给服务器 >3.用户访问服务器,先向服务器申请证书,并用证书商的公钥解密,拿到服务器的信息和服务器公钥 >4.用户使用服务器公钥和服务器通信(由于非对称加密较慢,实际中服务器和客户端会相互协商,指定某对称加密秘钥来进行通信加密) >5.用证书中的服务器公钥加密通信加密使用的对称秘钥
如何对数字证书进行校验
>要验证数字证书的真伪,就需要找到签发这个证书的CA证书,要验证CA证书的真伪则需要找到签发CA证书的CA证书,就这样一直找到根证书
CA的公钥一般来说由浏览器开发商内置在浏览器或操作系统的内部。于是,该前提条件在各种信任机制上,基本保证成立
SSL证书
称为服务器 SSL 证书,是遵守 SSL 协议的一种数字证书,由全球信任的证书颁发机构(CA)验证服务器身份后颁发。将 SSL 证书安装在网站服务器上,可实现网站身份验证和数据加密传输双重功能。SSL 协议及其继任者 TLS 协议,是一种实现网络通信加密的安全协议,可在客户端(浏览器)和服务器端(网站)之间建立一条加密通道,保证数据在传输过程中不被窃取或篡改
这个证书总共有 3 个测评等级,其中,EV SSL 证书最高,OV SSL 证书其次,而 DV SSL 证书最弱。DV SSL 证书只验证域名所有权,仅为加密传输信息的作用,并不能证明网站的真实身份;OV SSL 证书是需要验证网站所有单位的真实身份的标准型 SSL 证书,而 EV SSL 证书则是遵循全球统一严格身份验证标准办法的 SSL 证书,是目前业界最高安全级别的 SSL 证书。其中,OV SSL 主要在国内网站应用,而 EV SSL 则在国外网站应用更多。靠谱的商用网站一般都会部署 EV SSL 证书或 OV SSL 证书,绝对不会部署已经被欺诈网站滥用的 DV SSL 证书
SSL证书分类和文件种类
证书的分类
CA证书: 就是根证书。如果不安全该证书,即使安装了其他证书,浏览器也会提示不安全,但是在单向https认证中,该证书的安装是可选的。 服务器证书: SSL证书中必须要安装的证书之一,通过证书的key生成csr文件,然后再通过CA证书签名,生成服务器的证书。 客户端证书: 在双向https验证中,就必须有客户端证书,生成方式同服务器证书一样,单向证书则不用生成
证书的格式
CER:服务器证书、CA根证书链。CRT证书的微软型式,可以在微软系统环境下将.crt转换为.cer(.both DER编码的.cer,或base64 [PEM]编码的.cer)。 KEY:私钥。KEY扩展名用于私钥。 键可以被编码为二进制DER或ASCII PEM。 CRT:中间证书、证书文件。可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥。常用于 Apache,Nginx 等。CRT扩展用于证书。 证书可以被编码为二进制DER或ASCII PEM。 CER和CRT扩展几乎是同义词。 最常见的于Unix 或类Unix系统。 CSR:证书签名请求,认证请求由三个主要部分组成:认证请求信息、签名算法标识符和认证请求信息上的数字签名。第一部分包含重要信息,包括公钥。请求者的签名防止实体请求他人公钥的伪造证书。因此,生成CSR需要私钥,但私钥不是CSR的一部分。 PEM:一般是文本格式,可保存证书,可保存私钥。 DER .CER:文件是二进制格式,只保存证书,不保存私钥。 PFX .P12:二进制格式,同时包含证书和私钥,一般有密码保护。 JKS:二进制格式,同时包含证书和私钥,一般有密码保护。常用于 Weblogic,Tomcat,Jboss。 PFK:常用于 IIS 等。 KDB:常用于 IHS,Webspphere
SSL和TSL
提供的主要服务:
- 认证用户和服务器,确保数据发送到正确的客户机和服务器;
- 加密数据以防止数据中途被窃取;
- 维护数据的完整性,确保数据在传输过程中不被改变
SSL:
**Secure Socket Layer安全套接字层: **为Netscape所研发,用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
SSL协议可分为两层:
1.SSL记录协议(SSL Record Protocol):
它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
2.SSL握手协议(SSL Handshake Protocol):
它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
TLS:
Transport Layer Security传输层安全协议:用于两个应用程序之间提供保密性和数据完整性
该协议由两层组成:TLS记录协议,TLS握手协议
TLS(传输层安全)是更为安全的升级版 SSL,由于 SSL 这一术语更为常用,因此我们仍然将我们的安全证书称作 SSL
TLS与SSL区别
版本号:TLS记录格式与SSL记录格式相同,但版本号的值不同,TLS的版本1.0使用的版本号为SSLv3.1。
报文鉴别码:SSLv3.0和TLS的MAC算法及MAC计算的范围不同。TLS使用了RFC-2104定义的HMAC算法。SSLv3.0使用了相似的算法,两者差别在于SSLv3.0中,填充字节与密钥之间采用的是连接运算,而HMAC算法采用的是异或运算。但是两者的安全程度是相同的。
伪随机函数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。
报警代码:TLS支持几乎所有的SSLv3.0报警代码,而且TLS还补充定义了很多报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CA(unknown_ca)、拒绝访问(access_denied)等。
密文族和客户证书:SSLv3.0和TLS存在少量差别,即TLS不支持Fortezza密钥交换、加密算法和客户证书。
certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和SHA-1散列码时,计算的输入有少许差别,但安全性相当。
加密计算:TLS与SSLv3.0在计算主密值(master secret)时采用的方式不同。
填充:用户数据加密之前需要增加的填充字节。在SSL中,填充后的数据长度要达到密文块长度的最小整数倍。而在TLS中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为255字节),这种方式可以防止基于对报文长度进行分析的攻击。
TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS 在SSL v3.0 的基础上,提供了以下增强内容:
更安全的MAC算法
更严密的警报
“灰色区域”规范的更明确的定义
HTTPS单向认证
1.客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息;
2.服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书;
3.客户端使用服务端返回的信息验证服务器的合法性,包括:
证书是否过期;
发行服务器证书的CA是否可靠;(通过查询浏览器或本机内的CA证书)
返回的公钥是否能正确解开返回证书中的数字签名;(通过使用本机或浏览器内置的CA公钥进行解密)
服务器证书上的域名是否和服务器的实际域名相匹配;
验证通过后,将继续进行通信,否则,终止通信;
4.客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择;
5.服务器端在客户端提供的加密方案中选择加密程度最高的加密方式;
6.服务器将选择好的加密方案通过明文方式返回给客户端;
7.客户端接收到服务端返回的加密方式后,使用该加密方式生成产生随机码,用作通信过程中对称加密的密钥,使用服务端返回的公钥进行加密,将加密后的随机码发送至服务器;
8.服务器收到客户端返回的加密信息后,使用自己的私钥进行解密,获取对称加密密钥;
在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全;
HTTPS双向认证
相对于单向认证,增加了服务端对客户端的认证
1.客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息;
2.服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书;
3.客户端使用服务端返回的信息验证服务器的合法性,包括:
证书是否过期;
发行服务器证书的CA是否可靠;(通过查询浏览器或本机内的CA证书)
返回的公钥是否能正确解开返回证书中的数字签名;(通过使用本机或浏览器内置的CA公钥进行解密)
服务器证书上的域名是否和服务器的实际域名相匹配;
验证通过后,将继续进行通信,否则,终止通信;
4.服务端要求客户端发送客户端的证书即客户端证书公钥,客户端会将自己的证书发送至服务端;
5.验证客户端的证书,通过验证后,会获得客户端的公钥;
6.客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择
7.服务器端在客户端提供的加密方案中选择加密程度最高的加密方式;
8.将加密方案通过使用之前获取到的公钥进行加密,返回给客户端
9.服务器收到客户端返回的加密信息后,使用自己的私钥进行解密,获取对称加密密钥;
在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全;10.服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的密钥,在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全;
证书申请方式
阿里云
腾讯云
certbot::Let’s Encrypt是免费、开放和自动化的世界知名证书颁发机构,由非盈利组织互联网安全研究小组(ISRG)运营