一. 证书相关文件格式

证书相关文件有多种格式,常见格式:.crt.key.req.csr.pem.der

xx.crt:证书文件

xx.key:私钥文件

xx.req:请求文件

xx.csr:请求文件

xx.pem:证书文件为 pem 格式(文本文件)

xx.der:证书文件为 der 格式(二进制文件)

实际上,上述文件的扩展名可以随意命名。只是为了容易理解文件的功能而选择大家都认识的命名方式。但是,上述文件是有格式的,只能是 pem 格式或者 der 格式。使用什么格式的文件取决于需求。

pem 格式的文件为文本文件,内容分别为:

证书文件:

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

私钥文件:

-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

请求文件:

-----BEGIN CERTIFICATE REQUEST-----
-----END CERTIFICATE REQUEST-----   

二. 证书种类

证书分为根证书、服务器证书、客户端证书。根证书文件(ca.crt)和根证书对应的私钥文件(ca.key)由 CA(证书授权中心,国际认可)生成和保管。那么服务器如何获得证书呢?向 CA 申请!步骤如下:

  1. 服务器生成自己的公钥(server.pub)和私钥(server.key)。后续通信过程中,客户端使用该公钥加密通信数据,服务端使用对应的私钥解密接收到的客户端的数据
  2. 服务器使用公钥生成请求文件(server.req),请求文件中包含服务器的相关信息,比如域名、公钥、组织机构等;
  3. 服务器将 server.req 发送给 CA。CA 验证服务器合法后,使用 ca.keyserver.req 生成证书文件(server.crt)——使用私钥生成证书的签名数据;
  4. CA 将证书文件(server.crt)发送给服务器。

由于ca.keyca.crt 是一对,ca.crt 文件中包含公钥,因此 ca.crt 可以验证 server.crt是否合法——使用公钥验证证书的签名。

三. 验证方式

验证方式分为单向验证和双向验证。

单向验证

单向验证是指通信双方中一方验证另一方是否合法。通常是指客户端验证服务器

客户端需要:ca.crt

服务器需要:server.crtserver.key

PS:我们平时使用 PC 上网时使用的就是单向验证的方式。即,我们验证我们要访问的网站的合法性。PC 中的浏览器(火狐、IE、chrome等)已经包含了很多 CA 的根证书(ca.crt)。当我们访问某个网站(比如:https://www.baidu.com)时,网站会将其证书(server.crt)发送给浏览器,浏览器会使用 ca.crt 验证 server.crt 是否合法。如果发现访问的是不合法网站,浏览器会给出提示。

现实中,有的公司会使用自签发证书,即公司自己生成根证书(ca.crt)。如果我们信任此网站,那么需要手动将其证书添加到系统中。

双向验证

双向验证是指通信双方需要互相验证对方是否合法。服务器验证客户端,客户端验证服务器。

客户端需要:ca.crtclient.crtclient.key

服务器需要:ca.crtserver.crtserver.key

双向验证通常用于支付系统中,比如支付宝。我们在使用支付宝时必须下载数字证书,该证书就是支付宝颁发给针对我们这台机器的证书,我们只能使用这台机器访问支付宝。如果换了机器,那么需要重新申请证书。