fengwuxichen 2017-08-28
公司最近采用了Spring Boot架构以Docker容器服务作为载体给客户提供服务,但是最近碰到一个严重的安全问题,这也是这几个月来一直忙碌更换新的架构而忽视的安全问题,但是最近随着产品上线客户的使用安全问题被赤裸裸的暴露出来,好在Docker提供了证书安全保护方案,下面就来讲一下配置与采过的坑(其中命令都是官网提供,具体意义请查询官网https://docs.docker.com/engine/security/https)
生成ssl证书命令步骤:注:这里$HOST定义一个域名或服务器名 用DNS指向本机 比方说修改/etc/hosts 加一下 127.0.0.1 master 这里$HOST就是master了
1. openssl genrsa -aes256 -out ca-key.pem 4096
2.openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
3.openssl genrsa -out server-key.pem 4096
4.openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
5. echo subjectAltName = DNS:$HOST,IP:127.0.0.1 > extfile.cnf
6.openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
7.openssl genrsa -out key.pem 4096
8.openssl req -subj '/CN=client' -new -key key.pem -out client.csr
9.echo extendedKeyUsage = clientAuth > extfile.cnf
10.openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out cert.pem -extfile extfile.cnf
11.rm -v client.csr server.csr
12.chmod -v 0400 ca-key.pem key.pem server-key.pem
13.chmod -v 0444 ca.pem server-cert.pem cert.pem
测试证书是否正常
1.dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem \ -H=0.0.0.0:2376
2.docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem \ -H=$HOST:2376 version
Docker配置证书
1. cp -v {ca,cert,key}.pem /etc/docker/
2. vi /usr/lib/systemd/system/docker.service
3. ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock \
--tlsverify --tlscacert=/etc/docker/ca.pem \
--tlscert=/etc/docker/server-cert.pem \
--tlskey=/etc/docker/server-key.pem
4.将证书拷贝到client服务器 测试连接是否正常
curl https://master:2376/images/json \
--cert /etc/docker/cert.pem \
--key /etc/docker/key.pem \
--cacert /etc/docker/ca.pem
就这样Docker TLS连接就这样配置好了