自签发ssl证书保护docker daemon socket

证书

1.证书分为根证书、中间证书、终端用户证书。根证书和中间证书都可以签发终端用户证书,也就是CA证书。
2.服务器证书和客户端证书,服务器证书一般用于客户端验证服务端是否可信(客户端使用预置的权威CA机构证书去验证服务器证书是否是权威CA签发)。客户端证书用于双向认证时,客户端将客户端证书(由服务端证书签发)发给服务端,验证客户端是否可信。

使用openssl生成CA证书并签发服务器证书

1.生成CA证书私钥

openssl genrsa -aes256 -out ca-key.pem 4096

2.使用私钥生成CSR(certificate signing request),保证Common Name是运行dockerd的主机域名。

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

3.创建服务端私钥和CSR(certificate signing request),$HOST替换成运行dockerd主机的域名。

openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr

4.添加允许连接dockerd的主机ip或者域名(如果是远程主机添加外部ip), 设置dockerd的extendedKeyUsage 只能用于服务器验证。

echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf

5.用CA签发服务器证书

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
  -CAcreateserial -out server-cert.pem 

6.创建客户端私钥和CSR(certificate signing request)

openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr

7.用CA签发客户端证书

echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
  -CAcreateserial -out cert.pem -extfile extfile-client.cnf

8.修改私钥文件和证书文件权限

chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0400 ca-key.pem key.pem server-key.pem

9.设置dockerd启动命令只允许提供了被CA信任的证书的客户端连接。需要修改/lib/systemd/system/docker.service文件。

dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem \
  -H=0.0.0.0:2376

10.客户端连接命令指定CA证书,客户端证书,客户端私钥(Docker over TLS should run on TCP port 2376.)。

docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem \
  -H=$HOST:2376 version
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容