首页 > nginx > 根证书、服务器证书、用户证书的区别

根证书、服务器证书、用户证书的区别

2020年4月14日 发表评论 阅读评论

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证书+中间证书+根证书。证书链上的每个证书都是被它相邻的证书签发。

证书以证书链的形式存在, 只有当整个证书链上的证书都有效时,才会认定当前证书合法 :

  1. 最上层为root,也就是通常所说的CA,用来颁发证书
  2. 最下层为end-user,对应是每个网站购买使用的ssl证书
  3. 中间一层为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

分类: nginx 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.