加密通信过程中的证书交换
1. 为什么不用非对称加密,而是先使用非对称加密协商出一个对称密钥?
1. 非对称加密安全,但是开销大,速度慢
2. 不安全,公钥证书是公开的,很容易被人获取到,即在后续如果用私钥加密给对方的信息,第三方拿着公钥都能看见内容。
比如:客户给银行发送查询请求:账户aaa,密码123,请帮我查询余额,私钥加密请求给银行,第三方拿着公钥就很容易获取到信息了。
所以前期一般都是双方使用对方的公钥加随机数,协商出一个随机的对称密钥,后续就能保证不被窃取了。
因此,必须保证公钥证书的合法,以及确定是对方的,才可以保证后续的安全
2. 公钥证书,如何保证安全,而不是黑客冒充后,用自己的公钥证书替换?
公钥证书经CA认证,可以接收到后进行验证是否合法
3. 是否有标准协议支持?
SSL链接时是在client/server hello后直接将证书发送给对方
是否有标准协议? PKI是否支持? ACMEv2?
证书申请
CSR: CSR是Certificate Signing Request的英文缩写,即证书请求文件
也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,
证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书
具体可以参看:一些发布证书机构的要求,以下来自wosign:
1)在申请SSL证书之前,您必须先生成证书私钥和证书请求文件(CSR),
CSR是您的公钥证书原始文件,包含了您的服务器信息和您的单位信息,需要提交给 WoSign 。
而私钥则保存在您的服务器上,不得对外泄露,当然也不用提交给 WoSign,请妥善保管和备份您的私钥。
一个完整的数字证书由一个私钥和一个对应的公钥(证书)组成。
在生成CSR文件时会同时生成私钥文件,微软IIS在生成CSR时已经自动生成私钥和存放在安全地方。
2) 生成CSR文件时,一般需要输入以下信息:
Organization Name(O):申请单位名称法定名称,可以是中文或英文
Organization Unit(OU):申请单位的所在部门,可以是中文或英文
Country Code(C):申请单位所属国家,只能是两个字母的国家码,如中国只能是:CN
State or Province(S):申请单位所在省名或州名,可以是中文或英文
Locality(L):申请单位所在城市名,可以是中文或英文
Common Name(CN):申请SSL证书的具体网站域名,支持中文域名(中文.com或中文.cn)
总结: 客户先自己生成私钥,自己保存,不公开也不传输。然后生成与之对应的CSR,发送给CA,CA依据CSR为客户生成证书(公钥证书),然后传递给客户。
(此处的传输协议,之前没有标准,在2019.3月份后,有了ACMEv2)
3月12日,Let's Encrypt 在官网宣布 ACME 协议已正式成为 IETF 标准(RFC 8555)
ACME(automated certificate management environment)自动证书管理环境
https://www.asiaregister.com/zh/news/ACME-xie-yi-ta-shi-shen-me-yi-ji-ru-he-gong-zuo-1289.htm
ACME 协议通过在给定 Web 服务器上安装证书管理代理来运行
一旦安装并正确配置了 ACME 代理,它实际上非常简单, 要获得颁发的数字证书,代理只需为所需的域生成 CSR 并将其发送到 CA. 这是通过 HTTPS 完成的。
1. 代理为域生成 CSR
2. 代理使用相应的私钥签署与 CSR 一起生成的公钥
3. 代理使用自己的私钥(初始配置期间生成的授权密钥)对整个 CSR 进行签名
4. CA 验证两个签名并颁发证书
5. 代理接收证书并将其安装在相关域上
无论如何,这个过程或多或少与更新相同。可以将代理配置为定期 ping CA,以旋转密钥或交换整个证书。这一切都是在幕后完成的,无需任何人为干预。
OCSP(Online Certificate Status Protocol )
https://blog.csdn.net/u013992766/article/details/51474438
在线证书状态协议(OCSP)是一个互联网协议,用于获取符合X.509标准的数字证书的状态。
该协议符合互联网标准规范,文档RFC6960对其进行了详细地描述。
OCSP协议的产生是用于在公钥基础设施(PKI)体系中替代证书吊销列表(CRL)来查询数字证书的状态,OCSP克服了CRL的主要缺陷:必须经常在客户端下载以确保列表的更新。通过OCSP协议传输的消息使用ASN.1的语义进行编码。消息类型分为“请求消息”和“响应消息”,因此致OCSP服务器被称为OCSP响应端
与CRLs比较
与CRL相比OCSP消息中信息内容更少,这能减少网络的负担和客户端的资源;
由于OCSP响应端需要解析的信息更少,客户端提供的用于解析消息的库函数更简单;
OCSP向发起响应方公开了一个特定的网络主机在特定时刻所使用的特定证书。由于OCSP并不强制加密该证书,因此信息可能被第三方拦截
CMP(Certificate Management Protocol)
https://blog.csdn.net/u013992766/article/details/51475011
CMP协议是一个互联网协议,用于在PKI体系中获取符合X.509标准的数字证书。文档RFC4210对其进行了详细地描述,
该协议是至今为止唯二使用CRFM(Certificate Request Message Format)格式的,
另一个使用该格式编码的协议是CMC(Certificate Management over CMS),在文档RFC4211中进行描述。
CMP消息使用ASN.1进行编码,使用DER方法,通常在HTTP协议上传输。
在PKI体系中,CA负责颁发数字证书,并作为服务端使用CMP协议。
通过该协议获取数字证书的客户端被称为EE(end entity终端实体)。EE和CA之间可以存在0个或者多个RA(registration authorities注册机构)。
可以有多种传输方式携带CMP消息
压缩在Http消息内
TCP或者其他可靠的传输连接
通过文件协议,例如FTP或者SCP
通过E-mail,使用MIME编码标准
CMP协议规范了PKI实体间应该以什么样的格式来组织通信的数据包,实际上就是一个结构体
CMP协议定义在tcp/http协议(数据传输协议)之上的数据交换协议,规定了通信双方消息以什么样的报文格式(数据结构)传递,数据报文以asn1编码为二进制在网络上进行传输。
PKI单证书和双证书
单证: 又叫做普通证书,我国有多家CA各个说法可能会有写区别,但总体都差不多,单证很厉害,它包含了签名算法跟加密算法。
双证: 又叫做高级证书,这个证书比较特别,是特定行业才会用到这种证书,其签名算法、加密算法分别包含在两张DN相同的数字证书中
包括:签名证书, 提供签名服务,不提供加密服务。为了保证唯一性,签名证书不能做备份,丢失了就只能重新申请证书
加密证书:提供加密服务,不提供签名服务.
数字证书早期就是一张证书中包含了签名跟加密算法的,
到后来一些特殊行业,签名证书的密钥需要在CA保留一份,但CA也不好办啊,因为加密的私钥是不可保留的,那怎么办呢?
于是乎就将签名跟加密的证书分开,具有不同的密钥,这样一来就可以保留签名的私钥而不去管他签名的私钥了,行业人士认为这是高级点的做法,于是乎就有了双证即高级证书的叫法。