一、创建根证书
1、创建根证书密钥
openssl genrsa -out PrivateRootCA.key 2048
2、使用以下命令生成CSR
openssl req -new -sha256 -key PrivateRootCA.key -out PrivateRootCA.csr
3、生成证书并自签名
openssl x509 -req -sha256 -days 3650 -in PrivateRootCA.csr -signkey PrivateRootCA.key -out PrivateRootCA.crt
4、或者使用以下命令一键生成v3版证书
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout PrivateRootCA.key -out PrivateRootCA.crt -reqexts v3_req -extensions v3_ca
二、为单个域名签发证书
1、创建密钥
openssl genrsa -out example.com.key 2048
2、创建请求文件
openssl req -new -sha256 -key example.com.key -out example.com.csr
3、生成证书并用根证书签名(要使浏览器信任,则必须加入x509v3扩展,加入备用名称<(printf "subjectAltName=DNS:example.com",且最长有效期为397天)
openssl x509 -req -in example.com.csr -CA PrivateRootCA.crt -CAkey PrivateRootCA.key -CAcreateserial -days 397 -out example.com.crt -extfile <(printf "subjectAltName=DNS:example.com")
4、如果需要导出pfx,需要指定证书密码
openssl pkcs12 -export -out example.com.pfx -inkey example.com.key -in example.com.crt
三、使用配置文件,为多个域名签发证书
1、创建密钥
openssl genrsa -out example.com.key 2048
2、准备多域名文件列表,配置文件内容:
[req]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
encrypt_key = no
default_md = sha256
req_extensions = req_ext
[req_distinguished_name]
commonName_default = www.example.com
commonName_max = 64
organizationName_default = Example Technology Co.,Ltd.
organizationalUnitName_default = IT Support Dept
localityName_default = NanChang
stateOrProvinceName_default = JiangXi
countryName_default = CN
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = *.example00.com
DNS.3 = www.example.com
DNS.4 = *.example01.com
IP.1 = 192.168.0.1
IP.2 = 10.0.0.1
配置文件字段说明:
- commonName_default: 证书的主域名
- organizationName_default: 企业/单位名称
- organizationalUnitName_default:企业部门
- localityName_default: 城市
- stateOrProvinceName_default: 省份
- ountryName_default: 国家代码,一般都是CN(大写)
- [alt_names]: 后面为备用名称列表,可以是域名、泛域名、IP地址
3、配置好该文件后,保存为san.conf,然后运行下面命令:
openssl req -new -nodes -out myreq.csr -config san.conf -subj "/" -batch
4、最后CSR文件在myreq.csr中,私钥在private.pem中。接下来用根证书签发:
openssl x509 -req -in myreq.csr -CA PrivateRootCA.crt -CAkey PrivateRootCA.key -CAcreateserial -days 397 -out mycom.crt -extfile san.conf -extensions req_ext
四、将根证书导入到操作系统中(Ubuntu)
$ sudo cp PrivateRootCA.crt /usr/local/share/ca-certificates #添加证书
$ sudo rm -f /usr/local/share/ca-certificates/PrivateRootCA.crt #删除证书
$ sudo update-ca-certificates