数字证书指的是由证书颁发机构(Certificate Authority)签发的电子证书,它唯一绑定了用户身份信息与非对称密钥,用于识别用户和加密数据。只有权威CA机构签发的证书才能够在网络中被信任。比如说由VerSign公司签发的数字证书,后者由国内数字证书认证中心签发的证书。这些证书一般都是收费服务。如果是企业内部部署系统需要或者学习研究使用,可以使用工具自己制作数字证书,简单方便,缺点是在Internet网络中不受认可,浏览器或者应用APP会给出证书不可靠的告警信息。
OpenSSL 是在 Linux 和其他系统上流行的生产级库和工具包,是一个优秀的密码算法库开源实现,同时提供了数字证书功能和SSL协议栈功能。下面我们看下如果用OpenSSL命令行实现。
之前我们提到了数字证书是将用户身份和非对称密钥进行绑定,常用的非对称算法一般有RSA,DSA,EC,国密SM2算法,我们以常用的RSA证书为例。
首先我们创建一个自签名证书作为根CA证书,具体步骤如下:
1.创建一个RSA私钥文件rsa.priv, 文件经过了PEM格式编码,内容为可显示的字符
2. 由私钥文件rsa.priv得到公钥文件rsa.pub
3. 生成数字证书请求文件ca.csr, ca.csr文件中保存了我们的私钥、身份等相关信息,其中私钥信息是加密存储的。我们可以使用命令查看ca.csr的内容。
4. 使用我们自己的私钥文件rsa.priv签发证书信息,通过输出信息可以看到,这是一个自签名“self-signature”证书。
ca.ext是我们提前准备的一个CA属性文件,它会在生成自签名证书上打上CA标记。
因为根CA一定是自签名证书,但是自签名证书不一定是根CA
5.查看证书文件ca.pem的具体信息
然后我们使用得到的自签名的根证书ca.pem,签发一个正常使用的实体证书,步骤如下:
1.相同的命令得到实体证书的私钥entry.pirv、公钥entry.pub和证书请求文件entry.csr
2.使用根CA的私钥文件ca.priv签名
3.显示数字证书内容
到此我们得到了根CA(ca.pem)和用户证书(entry.pem)文件,可以使用它们部署https等相关服务。我们可以使用openssl命令验证根CA与用户证书的签发关系。