证书
背景
无加密,信息泄露
对称加密,无法解决密钥传输的问题
非对称加密,公开公钥,公钥加密,私钥解密
公钥公开,如何防伪造和篡改,如何证明A是A,且信息没有被篡改
对称加密和非对称加密的作用都是对明文进行保护,但是他们都面临着一个问题,怎样分发密钥才安全?对称加密需要在网络中传输密钥显然不安全,而非对称加密确没有该问题。由于非对称密钥的公钥是公开的,所以即使在网络中传输也无所谓,所以现在互联网上大多都使用的非对称加密。但是这又产生了新的问题,怎样保证公钥的真实性,如果通信中有中间人存在,并且它伪造了通信呢?带着这些问题,数字签名和数字证书应运而生。
摘要算法
内容+hash = 摘要
单向hash算法,sha1、sha256、crc、md5,不可逆。所以能够用于验证数据的完整性,防篡改。
一般在软件发布时会同时公布软件的摘要信息,用户下载软件后再自行计算一次摘要,如果和发布者公布的值一致,则认为该软件由发布者发布未经更改过。
对称加密
非对称加密
数字签名
摘要+私钥 = 数字签名
用私钥对摘要进行加密。
客户收到信息后,用公钥解密数字签名得到hash,然后与实际计算出的hash进行对比。
不可抵赖:如果公钥能解密,内容一定是被私钥加密过的。私钥只有生成端有(排除私钥泄露)
数据完整性:hash比对可证明。数字签名已被私钥加密,且只能被公钥解开。解开后的摘要是完整的。对比再次通过内容计算后的摘要,就可以判断,内容是否被更改。
私钥签名 + 公钥验签
公钥仿冒:C冒充B的公钥,然后将自己的公钥发给A。
客户如何确认他解密使用的公钥确实是发送方的公钥?
如何客户手上的公钥被替换了,而加密的消息的私有与此公钥配对,那么通信方就被伪造了。
但是数字签名不能确保"公钥"的真实性,第三方可偷换"公钥",达到与伪服务器通信的目的,这样又产生了数字证书。
https://www.cnblogs.com/yushuo1990/p/6004050.html
数字证书
公钥 + 相关信息 + CA私钥 = 数字证书(如何安全分发公钥的问题,也奠定了信任链的基础)
数字证书里面包含了服务器的公钥,服务器的域名以及服务器所属的公司信息等内容,并且该信息是用CA的私钥进行加密的。客户请求服务时,服务器会同时发送数字签名和数字证书给客户。证书工作流程如下:
服务器向CA中心申请证书,CA负责核实服务器的真实性,并在证书里内置服务器域名证书使用者信息
客户浏览器或操作系统里内置有权威CA的公钥信息(即CA公钥不需要在网络中传输)
客户请求服务时,服务器把自己申请的数字证书和内容的数字签名一同发给客户
客户收到信息后在本地CA列表里查找CA公钥对数字证书解密,拿到真正的签名公钥,再用该公钥去解密数字签名,拿到HASH值去对比完整性
漏洞
CA的公钥是存储在本地计算机列表的,如果手动往列表里面导入了不可信的CA公钥,那么CA就可以仿冒,失去了权威性
证书校验
校验内容如下:
证书链的可信性;
证书是否吊销;
证书有效期;
证书域名校验,核查证书域名是否与当前的访问域名匹配;
https://www.cnblogs.com/xiaxveliang/p/13183175.html
证书格式
大概有以下格式:
.DER .CER,文件是二进制格式,只保存证书,不保存私钥。
.PEM,一般是文本格式,可保存证书,可保存私钥。
.CRT,可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥。
.PFX .P12,二进制格式,同时包含证书和私钥,一般有密码保护。
.JKS,二进制格式,同时包含证书和私钥,一般有密码保护。
CRT - CRT应该是certificate的三个字母,其实还是证书的意思,常见于LINIX系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码.
CER - 还是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码.
KEY - 通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER. 查看KEY的办法:openssl rsa -in mykey.key -text -noout 如果是DER格式的话,同理应该这样了:openssl rsa -in mykey.key -text -noout -inform der
CSR - Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好.做过iOS APP的朋友都应该知道是怎么向苹果申请开发者证书的吧. 查看的办法:openssl req -noout -text -in my.csr (如果是DER格式的话照旧加上-inform der,这里不写了)
PEM转为DER openssl x509 -in cert.crt -outform der -out cert.der
DER转为PEM openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
(提示:要转换KEY文件也类似,只不过把x509换成rsa,要转CSR的话,把x509换成req...)
证书制作
https://developer.aliyun.com/article/40398
证书安全
https://wooyun.js.org/drops/数字证书及其在安全测试中的应用.html
指纹
使用sha1算法
openssl x509 -fingerprint -sha1 -in client.crt
使用sha256算法
openssl x509 -fingerprint -sha256 -in client.crt
在证书认证方式中,平台存储设备CA证书,不存储设备证书完整内容,但会存储、计算和校验设备证书指纹。
为确保设备与平台通信的安全性,在双向认证过程中,平台不仅使用设备CA对设备证书进行验证,还会校验【设备关联的证书指纹】与【双向认证使用的设备证书的指纹】的一致性。