openssl生成数字证书

admin
admin 2019年07月12日
  • 在其它设备中阅读本文章

数字证书是指 CA(即证书授权中心,或称证书授权机构)发行的一种电子文档,是一串能够表明 网络用户身份信息 的数字,提供了一种在计算机网络上验证网络用户身份的方式,因此数字证书又称为数字标识。数字证书对网络用户在计算机网络交流中的信息和数据等以加密或解密的形式保证了信息和数据的完整性和安全性。

  1. 验证网站是否可信(针对 HTTPS)
  2. 验证某文件是否可信(是否被篡改)
  3. 签发新的数字证书,自签的数字证书为根证书

数字证书常见格式

PEM--openssl 默认采用的信息存放格式,以 "-BEGIN" 开头,"-END" 结尾,内容是 BASE64 编码。
KEY-- 一般指 PEM 格式的私钥文件。
CSR-- 证书请求文件。生成数字证书前, 一般先由用户提交证书申请文件, 然后由 CA 来签发证书。
CRT-- 证书文件,一般是指使用 PEM 格式的证书,Apache 和 Nginx 服务器偏向于使用这种编码格式。
CER-- 证书文件,一般是指使用 DER 格式的证书,Java 和 Windows 服务器偏向于使用这种编码格式。

证书主题

表达证书的内容,例如:-subj "/C=CN/O=CA/CN=www.ca.com"
所在国家 (Country) 简称:C 字段,只能是国家字母缩写
所在省份 (State/Provice) 简称:ST 字段
所在城市 (Locality) 简称:L 字段
单位名称 (Organization Name) :简称:O 字段,对于 SSL 证书,一般为网站域名
公用名称 (Common Name) 简称:CN 字段,对于 SSL 证书,一般为网站域名或 IP 地址

数字证书的签名有两种方式,一种是 自签 ,一种是CA 签

自签的数字证书

自签需要一个密钥和组织(或网站)信息,使用 -newkey 直接随机生成一个,使用 -subj 指定组织信息,还可以指定证书过期时间。

// 先生成密钥,再自签
openssl genrsa -out ca.key 4096
openssl req -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/O=CA/CN=www.ca.com"

// 一步生成
openssl req -x509 -days 3650 -newkey rsa:4096 -noenc -keyout ca.key -out ca.crt -subj "/C=CN/O=CA/CN=www.ca.com"

CA 签发的数字证书

1、生成证书私钥

openssl genrsa -out my.key 4096

2、根据私钥生成证书签名请求

openssl req -new -key my.key -out my.csr -subj "/CN=www.my.com"

3、CA 中心签发证书
这里使用上一节自签的 CA 证书来签发

openssl x509 -req -days 3650 -in my.csr -CA ca.crt -CAkey ca.key -out my.crt

4、签发带 SAN 扩展的证书
SAN 拓展可以指定多个域名,先创建配置 san.ext 文件

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1=www.my.com

然后使用配置文件来签发证书

openssl x509 -req -days 3650 -in my.csr -CA ca.crt -CAkey ca.key -out my.crt -extensions v3_req -extfile san.ext

查看证书

// 查看证书详情
openssl x509 -text -in my.crt

// 查看证书申请信息
openssl req -text -in my.csr

数字证书格式转换

// crt 转 cer
openssl x509 -in my.crt -outform der -out my.cer

// cer 转 crt
openssl x509 -in my.cer -inform der -out my.crt