我正在尝试创建一个拥有1年或更长时间后过期证书的docker swarm。文档说明了语法,我尝试了这个SQLSERVERAGENT
但是在docker swarm init --cert-expiry 8760h0m0s
下,当我破译证书时,有效期仍为3个月。我如何确保有效性是我设定的?
答案 0 :(得分:2)
您可以使用OpenSSL工具手动生成证书,并将Docker守护程序配置为使用这些证书。
生成服务器证书
生成CA私钥和公钥:
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -out ca.pem
创建服务器密钥和证书签名请求(CSR):
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=my.company.com" -sha256 -new -key server-key.pem -out server.csr
用CA签名公钥:
echo subjectAltName = DNS:my.company.com,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
生成密钥:
openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
生成客户端证书
创建客户端密钥和证书签名请求:
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
创建扩展程序配置文件:
echo extendedKeyUsage = clientAuth >> extfile.cnf
openssl x509 -req -days 1000 -sha256 -in client.csr -CA ../server/ca.pem -CAkey ../server/ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.pfx
使用/etc/docker/daemon.json配置Docker守护程序
{
"debug": false,
"tls": true,
"tlsverify": true,
"tlscacert": "/etc/docker/certificates/server/ca.pem",
"tlscert": "/etc/docker/certificates/server/server-cert.pem",
"tlskey": "/etc/docker/certificates/server/server-key.pem",
"hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"]
}
启动Docker服务
systemctl start docker
看看这篇文章Building Jenkins Pipelines – Setting Up Docker Swarm。那里有逐步的指南。
答案 1 :(得分:0)
在任何管理节点上运行以下命令:
docker swarm update --cert-expiry 8760h0m0s
docker swarm ca --rotate | openssl x509 -text -noout
第一个将设置证书的到期日期。 最后一个实际上将应用更改并自动在所有群集节点上轮换证书。如果对解码证书文本输出不感兴趣,则可以省略openssl部分。