1、創建ca文件夾,存放CA私鑰和公鑰
mkdir -p /usr/local/ca
cd /usr/local/ca/
2、生成CA私鑰和公鑰
openssl genrsa -aes256 -out ca-key.pem 4096
連續輸入兩次密碼
3、依次輸入密碼、國家、省、市、組織名稱、郵箱等
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
現在已經有了CA,接下來創建一個服務器密鑰和證書簽名請求(CSR),確保“公用名”與你用來連接到Docker的主機名匹配。
4、生成server-key.pem
openssl genrsa -out server-key.pem 4096
5、CA來簽署公鑰
由於TLS連接可以通過IP地址和DNS名稱進行,所以在創建證書時需要指定IP地址。例如,允許使用10.10.10.20和127.0.0.1進行連接:
$Host換成你自己服務器外網的IP或者域名
openssl req -subj "/CN=$Host" -sha256 -new -key server-key.pem -out server.csr
6、配置白名單
1 )允許指定ip可以連接到服務器的docker,可以配置ip,用逗號分隔開。
2 )因為已經是ssl連接,所以我推薦配置0.0.0.0,也就是所有ip都可以連接(但只有擁有證書的才可以連接成功),這樣配置好之后公司其他人也可以使用。
echo subjectAltName = IP:自己的服務器id,IP:0.0.0.0 >> extfile.cnf
7、將Docker守護程序密鑰的擴展使用屬性設置為僅用於服務器身份驗證
echo extendedKeyUsage = serverAuth >> extfile.cnf
8、生成簽名證書
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out server-cert.pem -extfile extfile.cnf
9、生成客戶端的key.pem
openssl genrsa -out key.pem 4096 openssl req -subj '/CN=client' -new -key key.pem -out client.csr
10、使密鑰適合客戶端身份驗證
echo extendedKeyUsage = clientAuth >> extfile.cnf
echo extendedKeyUsage = clientAuth > extfile-client.cnf
11、生成簽名證書
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out cert.pem -extfile extfile-client.cnf
生成cert.pem,需要輸入前面設置的密碼。
12、 刪除不需要的文件
rm -v client.csr server.csr extfile.cnf extfile-client.cnf
一路確定即可
13、刪除寫入權限,只允許讀取
chmod -v 0400 ca-key.pem key.pem server-key.pem chmod -v 0444 ca.pem server-cert.pem cert.pem
14、歸集服務器證書
cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/
15、修改Docker配置
vim /lib/systemd/system/docker.service 將 ExecStart=/usr/bin/dockerd替換為: ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem -- tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
16、重新加載daemon並重啟docker
systemctl daemon-reload
systemctl restart docker
17、保存相關客戶端的pem文件到本地
18、IDEA CA配置