根证书、服务器证书、用户证书的区别
https证书包含的文件
ca.cer | 中间证书和根证书 |
---|---|
nginx.cn.cer | 你申请的ssl证书 |
fullchain.cer | 包括了 ca.cer 和 nginx.cn.cer 的全链证书 |
nginx.cn.key | 证书的私钥 |
什么是证书链
证书链的意思是有一个证书机构A,A生成证书B,B也可以生成证书C,那么A是根证书。
操作系统预先安装的一些根证书,都是国际上很有权威的证书机构,比如 verisign 、 ENTRUST 这些公司。
我们普通申请的ssl证书都是这些根证书的孙证书。根证书签发中间证书,中间证书签发ssl证书。
证书链的顺序是:ssl证书+中间证书+根证书。证书链上的每个证书都是被它相邻的证书签发。
证书以证书链的形式存在, 只有当整个证书链上的证书都有效时,才会认定当前证书合法 :
- 最上层为root,也就是通常所说的CA,用来颁发证书
- 最下层为end-user,对应是每个网站购买使用的ssl证书
- 中间一层为intermediates,是二级CA,这一层可以继续划分为多层,用来帮助root给end-user颁发证书。
浏览器中证书的验证顺序是
首先检查你购买的ssl证书的签发者是不是可信根证书,如果不是那么会检查你的证书的签发机构是否被可信根证书签发,以此类推,直到找到一个可信的根证书,标示你的证书是可信的,如果找不到那么你的证书是不可信的。
根证书是用来签发证书的,不参与通信,一般会内置在客户端的浏览器中。如果服务器没有安装中间证书,那么对于某些非主流浏览器、安卓手机设备,应用程序等可能没办法验证ssl证书的真实性,所以为了兼容所有客户端,服务器需要安装中间证书。
例如下面图中情况:你从证书2处购买了证书3,但是证书2不是默认包含在浏览器种的可信证书,中间证书2是根证书1签发的证书,如果服务器端只发送证书3不包含证书2,那么浏览器找不到证书3的签发者证书2,这样整个证书的验证链条就断裂了,你的证书就会被浏览器标识为无效证书“Invalid certificate” 或 “certificate not trusted”
总结
根证书是第三方被大家信任的认证机构自签名的证书,通常浏览器会内置。
服务器证书是包含包含“ssl证书+中间证书”的证书链,对于某些不知名的中间证书,浏览器是不内置,服务器需要把ssl证书连同中间证书一起发送给浏览器,如果证书链不全,你的证书在这些浏览器上会不被信任。
用户证书有两种理解,如果对于证书颁发机构和服务器来说你可以理解为你申请的ssl证书;对于服务器-客户端交互来说是客户端的证书,比如我们的u盾。
大家可能有一个疑问,服务器上要不要安装根证书?从上面分析可以知道,浏览器是内置了根证书,不需要我们在服务器的证书链上加根证书。
如何安装中间证书?不同web服务器有不同的设置,apache有个变量SSLCertificateChainFile专门对应中间证书bundle,Nginx需要把ssl证书和中间证书打包为一个文件。
证书格式转换
cer和pem格式文件都是证书文件,key文件是私钥文件,证书机构会将两种格式的文件发放给客户。
pem或cer格式转为JKS格式文件包括公钥和私钥
第一步:在openssl命令行下输入如下命令,将pem或cer证书转pfx格式,回车后需要输入两次密码
pkcs12 -export -out server.pfx -inkey server.key -in server.pem(server.cer)
第二步:在命令行下使用java 的keytool工具,将pfx文件转换成jks文件
keytool -importkeystore -srckeystore server.pfx -destkeystore server.jks -srcstoretype PKCS12 -deststoretype JKS
pem格式证书转成cer格式
先在终端cd到文件目录下 然后
openssl x509 -outform der -in xxx.pem -out yyy.cer
或者直接把pem文件双击导入钥匙串,然后再钥匙串里右键导出
(xxx 是原证书的名称,yyy是转格式生成的证书名称)
crt格式转成der格式
先在终端cd到文件目录下 然后
openssl x509 -in xxx.crt -out yyy.der -outform DER
(xxx 是原证书的名称,yyy是转格式生成的证书名称)
参考:
https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/
https://knowledge.digicert.com/solution/SO16297.html