日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

詳解docker?API管理接口增加CA安全認證_docker

作者:字母哥哥 ? 更新時間: 2022-08-01 編程語言

前文中我們曾經介紹過《使用IDEA遠程工具》連接Docker REST API,我們會發現一個問題,任何知道Docker 服務器IP、端口的第三方都可以訪問這個API,非常的不安全。為了保證Docker API的安全性,我們有必要使用數字證書進行安全驗證。

  • 為docker服務端配置服務端證書,用于驗證客戶端請求
  • 為訪問docker 服務的客戶端配置客戶端證書,用于驗證服務端發送的交互信息的安全性。

如果只在自己公司內部使用到數字證書,就沒有必要花錢向專業的CA機構進行認證授權(價格不菲),采用自生成的CA證書在公司內部使用也是完全可以的。下圖是CA證書及子證書的簽發過程,請結合文章進行理解。

一、模擬創建CA證書(中間邊框的部分)

正常情況下CA機構有自己的私鑰,因為我們是模擬CA機構,所以這個私鑰需要我們自己創建。執行下文中的命令,輸入2次密碼(密碼務必記住,后文中需要使用),執行完命令之后,當前目錄下生成一個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:

該命令用于創建機構CA證書,執行該命令首先會提示輸入密碼(上文中設置的)。正常請開給你下,該流程是某公司向CA提機構提交自己公司的相關信息,CA授權機構根據這些信息(審核信息之后)生成一個用于該公司的CA證書(該公司范圍的根證書)。

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

然后提示需要輸入國家、省份、地市、公司、組織、服務器地址或域名、郵箱聯系方式,其中國家和服務器地址或域名要填上,否則后續無法使用。

# 國家: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) []:
# 服務器地址或域名,按要求填寫
Common Name (eg, your name or your server's hostname) []:  192.168.1.111
# 郵箱聯系方式,可以不填,直接回車
Email Address []:

當前目錄下生成一個ca.pem,該證書就是CA證書

二、簽發服務器端證書(右邊藍色背景部分)

CA證書還可以用于簽發子證書(數字證書),下面我們就模擬簽發一個服務端證書。仍然需要先創建一個服務器端私鑰server-key.pem

openssl genrsa -out server-key.pem 4096

創建服務器端CSRserver.csr,該文件作為向授權機構申請簽發子證書的申請文件

openssl req -subj "/CN=192.168.1.111" -sha256 -new -key server-key.pem -out server.csr

模擬授權機構創建配置文件,serverAuth表示服務端證書

echo subjectAltName = IP:192.168.1.111,IP:0.0.0.0 >> extfile.cnf 
echo extendedKeyUsage = serverAuth >> extfile.cnf

創建服務器端證書會提示輸入密碼,輸入上文中設置的密碼即可。

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作為服務端CA證書

三、簽發客戶端證書(左邊黃色背景的部分)

下面我們就模擬簽發一個客戶端證書。仍然需要先創建一個客戶端私鑰key.pem

openssl genrsa -out key.pem 4096

創建客戶端CSRclient.csr,該文件作為向授權機構申請簽發子證書的申請文件

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

模擬授權機構創建配置文件,clientAuth 表示客戶端證書

echo extendedKeyUsage = clientAuth >> extfile.cnf

執行下列命令同樣會提示輸入密碼,生成2個文件ca.srlcert.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

四、簽發證書收尾工作

刪除證書簽發請求文件,已經失去用處。

rm -v client.csr server.csr

為上文中生成的各種證書授予文件訪問權限。

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服務端

然后我們為docker服務端配置證書,分別是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服務

#重啟
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。

原文鏈接:https://blog.csdn.net/hanxiaotongtong/article/details/125139931

欄目分類
最近更新