目录

玩转数字证书的一些笔记

RSA公私钥对

生成公私钥对,默认使用的是PEM格式写到文件中。

1
openssl genrsa -out root.key

查看公私钥对

1
openssl rsa -noout -text -in root.key

包含了以下几个数字

  • modulus
  • publicExponent
  • privateExponent
  • prime1
  • prime2
  • exponent1
  • exponent2
  • coefficient

对应到RSA算法中

n –> modulus

e –> publicExponent

d –> privateExponent

其中n和e组成了公钥,n和d组成私钥

提取出公钥,输出到公钥文件root.pub

1
openssl rsa -pubout -in root.key -out root.pub

查看公钥文件

1
openssl rsa -text -noout -pubin -in root.pub

仅包含

  • modulus
  • exponent 对应root.key中存储的publicExponent

生成自签署CA证书

  1. 生成公私钥 root.key
1
openssl genrsa -out root.key
  1. 生成证书请求文件 root-req.csr
1
openssl req -new -out root-req.csr -key root.key
  1. 生成根证书 root-cert.cer
1
openssl x509 -req -in root-req.csr -out root-cert.cer -signkey root.key -CAcreateserial

此时得到的root-cert.cer以及root.key ,就可以算是自己私有的一个CA证书机构了,可以对其他证书做签发。

-CAcreateserial参数,会额外生成一个root-cert.srl证书序列号文件。初始序列号为随机数。每次使用该CA证书做签发其他证书时,自动读取该文件的值+1再写入新证书中。

使用自签署的CA证书签发客户端或服务端证书

  1. 生成客户端的公私钥对
1
openssl genrsa -out client.key
  1. 生成证书请求文件
1
openssl req -new -out client-req.csr -key client.key
  1. 签发证书
1
openssl x509 -req -in client-req.csr -out client-cert.cer -CA root-cert.cer -CAkey root.key -days 360

查看信息

查看公私钥对KEY信息

1
openssl rsa -noout -text -in root.key

查看证书请求文件CSR信息

1
openssl req -noout -text -in root.csr

查看证书信息

1
openssl x509 -noout -text -in ca.crt

-noout代表不将文件内容再次输出

-text展示描述信息

查看证书序列号

1
openssl x509 -in root-cert.cer -noout -serial

关于文件名

PEM格式则使用Base64编码二进制数据的方式存储了证书数据。

-----BEGIN (label) -----

...

-----END (label) -----

这个label决定了被编码消息的类型,通常这些类型有如下一些:

" CERTIFICATE “, " CERTIFICATE REQUEST “, " PRIVATE KEY " , " X509 CRL "

PEM 格式的数据通常存储在以下后缀的文件中。

  • .pem
  • .crt证书文件,*nix系统常用
  • .cer微软使用的证书文件
  • .csr证书请求文件
  • .key(公钥、私钥)

这个PEM文件中的lable字段比文件后缀名更加准确地代表了数据类型,因为许多不同类型的数据都可以保存在.pem结尾的文件中。