目标:使用Docker Compose 搭建一个拥有权限认证、TLS的私有仓库,仓库地址为dockerrepo.cnbly.cn
首先新建一个目录,然后所有的操作均在如下目录进行。
[root@DockerImages ~]# mkdir /dockerrepo
[root@DockerImages ~]# cd /dockerrepo/
准备站点证书:
证书一般各大云服务运行商会免费为你的域名提供证书,因为本次我使用的是本地虚拟机,这里我是自行利用openssl自行签发证书
私有仓库的地址:dockerrepo.cnbly.cn
第一步 创建 CA 私钥
[root@DockerImages dockerrepo]# openssl genrsa -out "root-ca.key" 4096
第二步 利用私钥创建 CA 跟证书请求文件。
[root@DockerImages dockerrepo]# openssl req -new -key "root-ca.key" -out "root-ca.csr" -subj '/C=CN/ST=Guangdong/L=Shenzhen/O=Lian Hong Rui/CN=Lian Hong Rui Docker Registry CA'
#以上命令中 -subj 参数里的 /C 表示国家,如 CN ; /ST 表示省; /L表示城市或者地区; /O 表示组织名;/CN 通用名称。
第三步:配置CA根证书,新建root-ca.cnf
[root@DockerImages dockerrepo]# cat root-ca.cnf
[root_ca]
basicConstraints = critical,CA:TRUE,pathlen:1
keyUsage = critical, nonRepudiation, cRLSign, keyCertSign
subjectKeyIdentifier=hash
第四步:签发根证书
[root@DockerImages dockerrepo]# 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
Signature ok
subject=/C=CN/ST=Guangdong/L=Shenzhen/O=Lian Hong Rui/CN=Lian Hong Rui Docker Registry CA
Getting Private key
第五步:生成站点 SSL 私钥
[root@DockerImages dockerrepo]# openssl genrsa -out "dockerrepo.cnbly.cn.key" 4096
Generating RSA private key, 4096 bit long modulus
............................................................................................++
....++
e is 65537 (0x10001)
[root@DockerImages dockerrepo]#
第六步:使用私钥生成证书请求文件
[root@DockerImages dockerrepo]# openssl req -new -key "dockerrepo.cnbly.cn.key" -out "site.csr" -sha256 -subj '/C=CN/ST=Guangdong/L=Shenzhen/O=Lian Hong Rui/CN=dockerrepo.cnbly.cn'
第七步:配置证书,新建 site.cnf 文件
[server]
authorityKeyIdentifier=keyid,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage=serverAuth
keyUsage = critical, digitalSignature, keyEncipherment
subjectAltName = DNS:dockerrepo.cnbly.cn, IP:127.0.0.1
subjectKeyIdentifier=hash
第八步:签署站点 SSL 证书。
[root@DockerImages dockerrepo]# openssl x509 -req -days 750 -in "site.csr" -sha256 -CA "root-ca.crt" -CAkey "root-ca.key" -CAcreateserial -out "dockerrepo.cnbly.cn.crt" -extfile "site.cnf" -extensions server
Signature ok
subject=/C=CN/ST=Guangdong/L=Shenzhen/O=Lian Hong Rui/CN=dockerrepo.cnbly.cn
Getting CA Private Key
[root@DockerImages dockerrepo]#
这样已经拥有了 dockerrepo.cnbly.cn 的网站 SSL 私钥dockerrepo.cnbly.cn .key 和 SSL 证书 dockerrepo.cnbly.cn .crt 及 CA 根证书 root-ca.crt 。
新建 ssl 文件夹并将 dockerrepo.cnbly.cn .key dockerrepo.cnbly.cn .crt root-ca.crt 这三个文件移入,删除其他文件。