目錄
- 一、模擬創(chuàng)建CA證書(中間邊框的部分)
- 二、簽發(fā)服務(wù)器端證書(右邊藍(lán)色背景部分)
- 三、簽發(fā)客戶端證書(左邊黃色背景的部分)
- 四、簽發(fā)證書收尾工作
- 五、配置docker服務(wù)端
- 六、IDEA配置使用客戶端證書
前文中我們曾經(jīng)介紹過《使用IDEA遠(yuǎn)程工具》連接Docker REST API,我們會發(fā)現(xiàn)一個問題,任何知道Docker 服務(wù)器IP、端口的第三方都可以訪問這個API,非常的不安全。為了保證Docker API的安全性,我們有必要使用數(shù)字證書進(jìn)行安全驗證。
- 為docker服務(wù)端配置服務(wù)端證書,用于驗證客戶端請求
- 為訪問docker 服務(wù)的客戶端配置客戶端證書,用于驗證服務(wù)端發(fā)送的交互信息的安全性。
如果只在自己公司內(nèi)部使用到數(shù)字證書,就沒有必要花錢向?qū)I(yè)的CA機構(gòu)進(jìn)行認(rèn)證授權(quán)(價格不菲),采用自生成的CA證書在公司內(nèi)部使用也是完全可以的。下圖是CA證書及子證書的簽發(fā)過程,請結(jié)合文章進(jìn)行理解。
一、模擬創(chuàng)建CA證書(中間邊框的部分)
正常情況下CA機構(gòu)有自己的私鑰,因為我們是模擬CA機構(gòu),所以這個私鑰需要我們自己創(chuàng)建。執(zhí)行下文中的命令,輸入2次密碼(密碼務(wù)必記住,后文中需要使用),執(zhí)行完命令之后,當(dāng)前目錄下生成一個ca-key.pem
文件(上圖中紅色背景代表)。
# openssl genrsa -aes256 -out ca-key.pem 4096 Generating RSA private key, 4096 bit long modulus e is 65537 (0x10001) Enter pass phrase for ca-key.pem: Verifying - Enter pass phrase for ca-key.pem:
該命令用于創(chuàng)建機構(gòu)CA證書,執(zhí)行該命令首先會提示輸入密碼(上文中設(shè)置的)。正常請開給你下,該流程是某公司向CA提機構(gòu)提交自己公司的相關(guān)信息,CA授權(quán)機構(gòu)根據(jù)這些信息(審核信息之后)生成一個用于該公司的CA證書(該公司范圍的根證書)。
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
然后提示需要輸入國家、省份、地市、公司、組織、服務(wù)器地址或域名、郵箱聯(lián)系方式,其中國家和服務(wù)器地址或域名要填上,否則后續(xù)無法使用。
# 國家:CN Country Name (2 letter code) [XX]: CN # 省份: 可以不填,直接回車 State or Province Name (full name) []: # 地市:可以不填,直接回車 Locality Name (eg, city) [Default City]: # 公司: 可以不填,直接回車 Organization Name (eg, company) [Default Company Ltd]: # 組織: 可以不填,直接回車 Organizational Unit Name (eg, section) []: # 服務(wù)器地址或域名,按要求填寫 Common Name (eg, your name or your server's hostname) []: 192.168.1.111 # 郵箱聯(lián)系方式,可以不填,直接回車 Email Address []:
當(dāng)前目錄下生成一個ca.pem
,該證書就是CA證書
二、簽發(fā)服務(wù)器端證書(右邊藍(lán)色背景部分)
CA證書還可以用于簽發(fā)子證書(數(shù)字證書),下面我們就模擬簽發(fā)一個服務(wù)端證書。仍然需要先創(chuàng)建一個服務(wù)器端私鑰server-key.pem
openssl genrsa -out server-key.pem 4096
創(chuàng)建服務(wù)器端CSRserver.csr
,該文件作為向授權(quán)機構(gòu)申請簽發(fā)子證書的申請文件
openssl req -subj "/CN=192.168.1.111" -sha256 -new -key server-key.pem -out server.csr
模擬授權(quán)機構(gòu)創(chuàng)建配置文件,serverAuth
表示服務(wù)端證書
echo subjectAltName = IP:192.168.1.111,IP:0.0.0.0 >> extfile.cnf echo extendedKeyUsage = serverAuth >> extfile.cnf
創(chuàng)建服務(wù)器端證書會提示輸入密碼,輸入上文中設(shè)置的密碼即可。
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
生成2個文件ca.srl、server-cert.pem,我們需要的是server-cert.pem
作為服務(wù)端CA證書
三、簽發(fā)客戶端證書(左邊黃色背景的部分)
下面我們就模擬簽發(fā)一個客戶端證書。仍然需要先創(chuàng)建一個客戶端私鑰key.pem
openssl genrsa -out key.pem 4096
創(chuàng)建客戶端CSRclient.csr
,該文件作為向授權(quán)機構(gòu)申請簽發(fā)子證書的申請文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
模擬授權(quán)機構(gòu)創(chuàng)建配置文件,clientAuth
表示客戶端證書
echo extendedKeyUsage = clientAuth >> extfile.cnf
執(zhí)行下列命令同樣會提示輸入密碼,生成2個文件ca.srl
、cert.pem
,我們需要的是cert.pem
作為客戶端證書
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
四、簽發(fā)證書收尾工作
刪除證書簽發(fā)請求文件,已經(jīng)失去用處。
rm -v client.csr server.csr
為上文中生成的各種證書授予文件訪問權(quán)限。
chmod -v 0400 ca-key.pem key.pem server-key.pem; chmod -v 0444 ca.pem server-cert.pem cert.pem;
查看CA證書有效期
# openssl x509 -in ca.pem -noout -dates notBefore=Apr 10 01:17:55 2022 GMT notAfter=Apr 7 01:17:55 2032 GMT
五、配置docker服務(wù)端
然后我們?yōu)閐ocker服務(wù)端配置證書,分別是ca.pem、server-cert.pem、server-key.pem。將這三個文件放入/etc/docker/cert/
目錄下。
mkdir /etc/docker/cert/; cp ./ca.pem ./server-cert.pem ./server-key.pem /etc/docker/cert/;
修改vim /lib/systemd/system/docker.service
文件中的ExecStart
這一行,修改為如下的一段
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/cert/ca.pem --tlscert=/etc/docker/cert/server-cert.pem --tlskey=/etc/docker/cert/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
修改之后重啟docker服務(wù)
#重啟 systemctl daemon-reload && systemctl restart docker
六、IDEA配置使用客戶端證書
我們在IDEA docker插件客戶端證書配置處做如下選擇:“File -> Settings -> Build、Execution、Deployment -> Docker”
- Engine API URL的位置寫
https://<ip>:2375
,記住是https,不是http,也不是tcp - 將客戶端的需要的三個證書文件ca.pem、cert.pem、key.pem放入一個目錄下,并使選擇該目錄作為Certificates folder。