数字证书的简单记录
CA(Certificate Authority):即数字证书颁发认证机构。
CA数字证书(crt/cer证书):数字证书 = 申请者与颁发者信息+申请者公钥+颁发者签名,由CA机构使用私钥签名得到数字证书。
CA中间证书:如果使用CA根证书直接签发SSL证书,如果发生了错误,或者说要取消掉root,那么用这个根证书签名的所有证书都将变为不可信。所以,根证书用自己的私钥对中间证书进行签名,这时中间证书就变为可信证书了。中间根又可以给另一个中间跟进行签名,这个被中间根签名的新中间根同样也可以用来签署SSL证书。
根证书(root certificate)是CA中心自签名的证书,即证书链的起点,安装根证书,就是信任此CA中心。首先我们要知道,证书(后文称之为证书A)中的内容有用户的信息、公钥以及CA中心的签名。那么我们如何确定这个CA组织的签名是否可信呢?显然需要用到这个CA中心的公钥,那么这个公钥又要从哪里获取呢?当然是从包含有CA中心公钥的那份证书(后文称之为证书B)中获取。下载了证书B后,问题又来了,如何验证证书B又是可信的呢?于是又要用签发证书B的证书C来验证这个证书B是可信的。
这个时候似乎是一个死循环,一层层嵌套,就是证书链,证书链的顶端就是自签名的证书,称之为根证书,也叫一级证书,也是自签证书。
SSL证书:
TLS证书:
HTTPS:
*.crt/cer:数字证书,Linux下叫crt,window下叫cer
*.key:私钥或公钥文件
*.csr:证书签名请求文件
*.pem:数字证书或秘钥,比较通用,两种都有可能。
证书申请、签发、验证流程
1、服务端生成秘钥对并发送csr请求:服务端通过OpenSSL生成公私密钥对,同时生成一个证书签名请求文件,即csr文件(Certificate Signature Request),包含公钥+申请信息+域名/IP等内容发送给CA。
2、CA机构签发数字证书:首先CA会对csr包计算Hash,然后CA使用自己的私钥将该Hash值加密,即对csr包进行数字签名(Certificate Signature),
最后将Certificate Signature添加在csr包上,形成数字证书。
3、客户端验证数字证书:首先客户端会使用同样的Hash算法计算该数字证书的Hash值H1,通常浏览器和操作系统中集成了CA的公钥信息,
浏览器收到服务器的数字证书后使用CA的公钥解密数字签名Certificate Signature的内容,得到另一个Hash值H2,最后比较如果H1和H2相同,则为可信赖的证书,进而能够使用数字证书中包含的服务端生成的公钥对即将发送的数据进行加密。
4、服务端收到客户端发送的加密数据后,使用私钥进行解密。