简单化证书与密钥关系图

初次接触证书和密钥时肯定会被一堆命令和文件吓的倒退几步,我也是摸索了2个星期后才敢说清楚了它们之间的逻辑关系。

那么介绍前需要明确几个概念:

非对称加密:

简而言之,是指加密与解密用的不是同一把钥匙的加密方式。它们2个是成对生成的。并且同时需要2把钥匙(公钥和私钥)才能打开。常见的有RSA、DES等方式。公钥和密钥都可以用文本编辑器打开。

数字证书

包含了公钥文件以及公钥文件的hash值。证书一般都有开头”BEGIN CERT”字样。证书分为根证书ca和二级证书等级别。

密钥

根据不同加密方式,生成的钥匙文件。并且一定要注意保密,不可泄露。密钥一般都有开头”BEGIN XXX ENCRYT”字样。

以上文件都可以由openssl命令来生成。下面是常见的证书文件列表:
ca.key

ca.cert

server.key

server.cert

也有可能会有客户端证书和密钥,client.cert 和 client.key。
那这6个文件是啥关系呢?先来看一张图。

简单化证书与密钥关系图

学着用用手机xmind画的,画的不好。
首先;同样文件名的2个文件是成对的,也就是一个.key对应一个.cert。
然后server.cert由server.key配对生成,由ca.key 和 ca.cert签署。
同样,client.cert由client.key配对生成,由ca.key 和 ca.cert签署。

之所以会有客户端的2个文件,是因为涉及到服务端/客户端的对阵加密通讯机制。通常情况下,服务端不会要求客户端携带证书才能进行访问,这个时候只需要2个server文件即可。

那么大部分证书和密钥都是可以通过记事本打开的,除了java有它自己一套格式,叫做jks。
通过truststore.jks存储的是多个证书文件,keystore.jks则是密钥文件。

嗯,本次就到这里了。虽然coderselftrain.com这个域名到期了,但还是接着写博客吧。否则我这样的‘小狗’记性老是容易忘记曾经的经历。