如何生成证书

生成证书需要使用openssl工具,包括根证书和用户证书。在生成证书的具体步骤之前,我们需要知道几个与证书相关的文件格式,所有这些格式都属于PKCS(The Public-Key Cryptography Standards)标准:

  • .key文件:私钥文件,通常使用rsa算法,私钥需要自己保存,无需提交给CA机构
  • .csr文件:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写。生成该文件时需要用到自己的私钥。
  • .crt文件:CA认证后的证书文件,certificate的缩写。
  • .crl文件:证书吊销列表,Certificate Revocation List的缩写
  • .pem文件:用于导出,导入证书时候的证书的格式。该文件实际上是.crt文件和.key文件的合体,与windows下使用.pfx类似,不同的是.pem使用base64字符存储,而.pfx使用二进制存储。

生成CA根证书的步骤:生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt

# Generate CA private key
openssl genrsa -out ca.key 2048

# Generate CSR 找到openssl.cnf配置文件路径 find / -name openssl.cnf
openssl req -new -key ca.key -out ca.csr -config openssl.cnf配置文件路径

# Generate Self Signed certificate(CA 根证书)
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

过程中我们部署在内网的服务会采用这种自签名的证书,自己随便填一些内容

生成用户证书的步骤

生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt

# private key
$openssl genrsa -des3 -out server.key 1024

# generate csr
$openssl req -new -key server.key -out server.csr -config openssl.cnf配置文件路径

# generate certificate
$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

生成过程中可能会报如下错误,请按指标解决

在第三步中,我们使用了根证书ca.crt以及对应的私钥ca.key来进行签名,而不是用户的私钥server.key

生成.pem文件

cat server.crt server.key > server.pem

作者 灰武士