According to the official docker docs docker security let's make tls connection to docker host:
go to the docker host and generate CA key:
# openssl genrsa -aes256 -out ca-key.pem 4096
then generate CA certificate:
# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
Now create server private keey:
# openssl genrsa -out server-key.pem 4096
And then certificate request:
# openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
Create extfile.cnf to be able connect to docker host via hostname or IP:
# echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf
# echo extendedKeyUsage = serverAuth >> extfile.cnf
Now, generate the signed certificate:
# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
Now we can generate clients' private key
# openssl genrsa -out key.pem 4096
# echo extendedKeyUsage = clientAuth > extfile-client.cnf
and request for certificate:
# openssl req -subj '/CN=client' -new -key key.pem -out client.csr
and create clinet's certificate:
# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
change permission :
# chmod -v 0400 ca-key.pem key.pem server-key.pem
# chmod -v 0444 ca.pem server-cert.pem cert.pem
Stop docker service and modify it:
# systemctl stop docker
# vi /usr/lib/systemd/system/docker.service
Modify ExecStart command:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/private/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
and then reload daemon config and start docker service:
# systemctl daemon-reload
# systemct start docker
Add firewall rules:
# firewall-cmd --permanent --zone=public --add-port=2376/tcp
# firewall-cmd --reload
Now on the client host put the appropriate key, certificates: ca.pem, cert.pem, key.pem and set DOCKER_HOST variable :
# export DOCKER_HOST=$HOST:2376
and try to connect to docker host :
# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem info
go to the docker host and generate CA key:
# openssl genrsa -aes256 -out ca-key.pem 4096
then generate CA certificate:
# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
Now create server private keey:
# openssl genrsa -out server-key.pem 4096
And then certificate request:
# openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
Create extfile.cnf to be able connect to docker host via hostname or IP:
# echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf
# echo extendedKeyUsage = serverAuth >> extfile.cnf
Now, generate the signed certificate:
# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
Now we can generate clients' private key
# openssl genrsa -out key.pem 4096
# echo extendedKeyUsage = clientAuth > extfile-client.cnf
and request for certificate:
# openssl req -subj '/CN=client' -new -key key.pem -out client.csr
and create clinet's certificate:
# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
change permission :
# chmod -v 0400 ca-key.pem key.pem server-key.pem
# chmod -v 0444 ca.pem server-cert.pem cert.pem
Stop docker service and modify it:
# systemctl stop docker
# vi /usr/lib/systemd/system/docker.service
Modify ExecStart command:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/private/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
and then reload daemon config and start docker service:
# systemctl daemon-reload
# systemct start docker
Add firewall rules:
# firewall-cmd --permanent --zone=public --add-port=2376/tcp
# firewall-cmd --reload
Now on the client host put the appropriate key, certificates: ca.pem, cert.pem, key.pem and set DOCKER_HOST variable :
# export DOCKER_HOST=$HOST:2376
and try to connect to docker host :
# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem info
Комментариев нет:
Отправить комментарий