生成一个 CA 证书,用这个 CA 证书来签发其他 SSL 证书。只需将 CA 证书添加到信任列表,由其签名的 SSL 证书也可以自动被信任。

1. 创建 CA 私钥

openssl genrsa -out ca.key 2048

2. 生成自签名 CA 证书

openssl req \
    -subj "/C=CN/ST=Tianjin/L=Tianjin/O=Mocha/OU=Mocha Software/CN=Server CA/[email protected]" \
    -new \
    -x509 \
    -days 3650 \
    -key ca.key \
    -out ca.crt

3. 生成需要颁发证书的私钥

openssl genrsa -out server.key 2048

4. 生成要颁发证书的证书签名请求

证书签名请求当中的 Common Name 必须区别于 CA 的证书里面的 Common Name

openssl req \
    -subj "/C=CN/ST=Tianjin/L=Tianjin/O=Mocha/OU=Mocha Software/CN=test2.sslpoc.com/[email protected]" \
    -new \
    -key server.key \
    -out server.csr

5. 创建签名配置文件

创建一个cert.ext文件,输入以下内容。alt_names 可按需添加域名和 IP。

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
IP.2 = 127.0.0.1
DNS.3 = *.localhost
DNS.4 = *.test.com

6. 用 2 创建的 CA 证书给 4 生成的 签名请求 进行签名

openssl x509 -days 3650 -req -sha256 -extfile cert.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

其中 ca.crt 是导入本地的 CA 证书。
server.crt 和 server.key 用来部署到 web 服务器。

参考链接:

文章目录