证书文件格式
- xx.crt:证书文件
- xx.key:私钥文件
- xx.req:请求文件
- xx.csr:请求文件
- xx.pem:证书文件为 pem 格式(文本文件)
- xx.der:证书文件为 der 格式(二进制文件)
- xxx.pfx :iis需要的证书
- xxx.jks:java常见的证书类型
- xxx.kbs :Android使用的证书类型
KEY 通常指私钥。
CSR 是 Certificate Signing Request 的缩写,即证书签名请求,这不是证书,只是包含申请证书的基本信息。生成证书时要把这个提交给权威的证书颁发机构,颁发机构审核通过之后,再根据这些申请信息生成相应的证书。
CRT 即 certificate的缩写,即证书。
X.509 是一种证书格式。对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。
X.509的证书文件,一般以.crt结尾,根据该文件的内容编码格式,可以分为以下二种格式:
PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN…“开头,”-----END…"结尾,内容是 BASE64 编码。Apache 和 *NIX 服务器偏向于使用这种编码格式。
DER - Distinguished Encoding Rules,打开看是二进制格式,不可读。Java 和 Windows 服务器偏向于使用这种编码格式。
公私密钥和证书理解
- 1、客户端向服务器发出加密请求,服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
- 2、客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
- 3、如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
- 4、如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。
参考:https://cloud.tencent.com/developer/news/276498
证书种类与生成步骤
证书分为根证书、服务器证书、客户端证书。根证书文件(ca.crt)和根证书对应的私钥文件(ca.key)由 CA(证书授权中心,国际认可)生成和保管。那么如何服务器获得证书呢?向 CA 申请!步骤如下:
- 1、服务器生成自己的公钥(server.pub)和私钥(server.key)。公钥用于解密,私钥用于加密;
- 2、服务器使用公钥生成请求文件(server.req),请求文件中包含服务器的相关信息,比如域名、公钥、组织机构等;
- 3、服务器将 server.req 发送给 CA。CA 验证服务器合法后,使用 ca.key 和 server.req 生成证书文件(server.crt);
- 4、CA 将证书文件(server.crt)发送给服务器。
由于ca.key 和 ca.crt 是一对,ca.crt 文件中包含公钥,因此 ca.crt 可以解密 server.crt,用于验证 server.crt是否合法。
ca.crt、client.crt、server.crt的理解
ca.crt 是根证书文件可以当做理解是证书信任机构,用它来签发生成的客户端证书client.crt与服务器端证书server.crt。当客户端使用client.crt的私密加密数据发送到服务器端,服务器端使用ca.crt解密数字签名,验证客户端证书是否合法,如果是合法的话,解密获取客户端公钥进行数据解密。同理,服务器端收到客户端的加密数据,也通过ca.crt解密验证客户端是否合法,如果合法的话也是拿取解密出来的客户端公钥进行数据解密。
所以一般使用的话,客户端需要:
ca.crt、(检测是服务器端否合法)、client.crt(数据加密)
服务器端需要:
ca.crt、(检测是服务器端否合法)、server.crt(数据加密)
单向认证
单向验证是指通信双方中一方验证另一方是否合法。通常是指客户端验证服务器。
客户端需要:ca.crt
服务器需要:server.crt,server.key
PS:我们平时使用 PC 上网时使用的就是单向验证的方式。即,我们验证我们要访问的网站的合法性。PC 中的浏览器(火狐、IE、chrome等)已经包含了很多 CA 的根证书(ca.crt)。当我们访问某个网站(比如:https://www.baidu.com)时,网站会将其证书(server.crt)发送给浏览器,浏览器会使用 ca.crt 验证 server.crt 是否合法。如果发现访问的是不合法网站,浏览器会给出提示。
现实中,有的公司会使用自签发证书,即公司自己生成根证书(ca.crt)。如果我们信任此网站,那么需要手动将其证书添加到系统中
双向验证
双向验证是指通信双方需要互相验证对方是否合法。服务器验证客户端,客户端验证服务器。
客户端需要:ca.crt,client.crt,client.key
服务器需要:ca.crt,server.crt,server.key
双向验证通常用于支付系统中,比如支付宝。我们在使用支付宝时必须下载数字证书,该证书就是支付宝颁发给针对我们这台机器的证书,我们只能使用这台机器访问支付宝。如果换了机器,那么要重新申请证书。
部分内容参考来源:
https://zhuanlan.zhihu.com/p/86926335
https://www.cnblogs.com/hnxxcxg/p/11301262.html