跳到主要内容
方的代码随记
返回

准备站点 SSL 证书

更新于:

如果拥有域名,国内各大云服务商都提供免费的站点证书;也可以使用 openssl 自行签发。

下面以给私有仓库 docker.domain.com 签发 SSL 证书为例。

第一步:创建 CA 私钥

openssl genrsa -out "root-ca.key" 4096

第二步:创建 CA 根证书请求文件

openssl req \
          -new -key "root-ca.key" \
          -out "root-ca.csr" -sha256 \
          -subj '/C=CN/ST=Shanxi/L=Datong/O=Your Company Name/CN=Your Company Name Docker Registry CA'

-subj 参数说明:

字段含义示例
/C国家CN
/ST省Shanxi
/L城市或地区Datong
/O组织名Your Company Name
/CN通用名称域名或 CA 名称

第三步:配置 CA 根证书

新建 root-ca.cnf:

[root_ca]
basicConstraints = critical,CA:TRUE,pathlen:1
keyUsage = critical, nonRepudiation, cRLSign, keyCertSign
subjectKeyIdentifier=hash

第四步:签发根证书

openssl x509 -req  -days 3650  -in "root-ca.csr" \
               -signkey "root-ca.key" -sha256 -out "root-ca.crt" \
               -extfile "root-ca.cnf" -extensions \
               root_ca

第五步:生成站点 SSL 私钥

openssl genrsa -out "docker.domain.com.key" 4096

第六步:生成证书请求文件

openssl req -new -key "docker.domain.com.key" -out "site.csr" -sha256 \
          -subj '/C=CN/ST=Shanxi/L=Datong/O=Your Company Name/CN=docker.domain.com'

第七步:配置证书

新建 site.cnf,注意 subjectAltName 要同时写域名和 IP:

[server]
authorityKeyIdentifier=keyid,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage=serverAuth
keyUsage = critical, digitalSignature, keyEncipherment
subjectAltName = DNS:docker.domain.com, IP:127.0.0.1
subjectKeyIdentifier=hash

第八步:签署站点 SSL 证书

openssl x509 -req -days 750 -in "site.csr" -sha256 \
    -CA "root-ca.crt" -CAkey "root-ca.key"  -CAcreateserial \
    -out "docker.domain.com.crt" -extfile "site.cnf" -extensions server

收尾

此时已得到三个文件:

新建 ssl 文件夹,把这三个文件移入,删除其余中间文件(root-ca.csr、site.csr 等)。

客户端需要信任 root-ca.crt 才不会报证书警告:Linux 拷到 /usr/local/share/ca-certificates/ 后执行 update-ca-certificates,macOS 用「钥匙串访问」导入并设为始终信任。


分享这篇文章:

上一篇
Nginx 配置文件结构详解
下一篇
自签 SSL 证书(openssl / minica / mkcert)