证书


证书原理

无加密,信息泄露

对称加密,无法解决密钥传输的问题

非对称加密,公开公钥,公钥加密,私钥解密

公钥公开,如何防伪造和篡改,如何证明A是A,且信息没有被篡改

数字签名:A使用自己的私钥签名,然后将签名附带到信息上发给B,B通过A的公钥验证签名

通信双方通过非对称加密安全交换对称加密的密钥,后续通信过程的数据都使用对称加密保证数据机密性。

公钥仿冒:C冒充B的公钥,然后将自己的公钥发给A。

数字证书防止公钥伪造。通过第三方机构证明公钥的有效性:ca私钥签名B的公钥和相关信息,然后A使用ca的公钥验证B的公钥,ca的公钥一般是预置证书,

数字签名防止信息伪造。

 

总结:

(1)信息 + HASH = 摘要 摘要 + 私钥 = 数字签名(防篡改、防伪装、防否认的作用)

(2)公钥 + 相关信息 + CA私钥 = 数字证书(如何安全分发公钥的问题,也奠定了信任链的基础)

  • 加密场景,那么肯定希望只有我才能解密,别人只能加密。即公钥加密,私钥解密。

  • 签名场景,既然是签名,就希望只能我才能签名,别人只能验证。即私钥签名,公钥验签

 

证书格式

大概有以下格式:

  • .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/%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6%E5%8F%8A%E5%85%B6%E5%9C%A8%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8.html