詳解docker?API管理接口增加CA安全認(rèn)證
前文中我們?cè)?jīng)介紹過(guò)《使用IDEA遠(yuǎn)程工具》連接Docker REST API,我們會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,任何知道Docker 服務(wù)器IP、端口的第三方都可以訪問(wèn)這個(gè)API,非常的不安全。為了保證Docker API的安全性,我們有必要使用數(shù)字證書(shū)進(jìn)行安全驗(yàn)證。
- 為docker服務(wù)端配置服務(wù)端證書(shū),用于驗(yàn)證客戶端請(qǐng)求
- 為訪問(wèn)docker 服務(wù)的客戶端配置客戶端證書(shū),用于驗(yàn)證服務(wù)端發(fā)送的交互信息的安全性。
如果只在自己公司內(nèi)部使用到數(shù)字證書(shū),就沒(méi)有必要花錢(qián)向?qū)I(yè)的CA機(jī)構(gòu)進(jìn)行認(rèn)證授權(quán)(價(jià)格不菲),采用自生成的CA證書(shū)在公司內(nèi)部使用也是完全可以的。下圖是CA證書(shū)及子證書(shū)的簽發(fā)過(guò)程,請(qǐng)結(jié)合文章進(jìn)行理解。
一、模擬創(chuàng)建CA證書(shū)(中間邊框的部分)
正常情況下CA機(jī)構(gòu)有自己的私鑰,因?yàn)槲覀兪悄MCA機(jī)構(gòu),所以這個(gè)私鑰需要我們自己創(chuàng)建。執(zhí)行下文中的命令,輸入2次密碼(密碼務(wù)必記住,后文中需要使用),執(zhí)行完命令之后,當(dāng)前目錄下生成一個(gè)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)建機(jī)構(gòu)CA證書(shū),執(zhí)行該命令首先會(huì)提示輸入密碼(上文中設(shè)置的)。正常請(qǐng)開(kāi)給你下,該流程是某公司向CA提機(jī)構(gòu)提交自己公司的相關(guān)信息,CA授權(quán)機(jī)構(gòu)根據(jù)這些信息(審核信息之后)生成一個(gè)用于該公司的CA證書(shū)(該公司范圍的根證書(shū))。
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
然后提示需要輸入國(guó)家、省份、地市、公司、組織、服務(wù)器地址或域名、郵箱聯(lián)系方式,其中國(guó)家和服務(wù)器地址或域名要填上,否則后續(xù)無(wú)法使用。
# 國(guó)家:CN Country Name (2 letter code) [XX]: CN # 省份: 可以不填,直接回車(chē) State or Province Name (full name) []: # 地市:可以不填,直接回車(chē) Locality Name (eg, city) [Default City]: # 公司: 可以不填,直接回車(chē) Organization Name (eg, company) [Default Company Ltd]: # 組織: 可以不填,直接回車(chē) Organizational Unit Name (eg, section) []: # 服務(wù)器地址或域名,按要求填寫(xiě) Common Name (eg, your name or your server's hostname) []: 192.168.1.111 # 郵箱聯(lián)系方式,可以不填,直接回車(chē) Email Address []:
當(dāng)前目錄下生成一個(gè)ca.pem
,該證書(shū)就是CA證書(shū)
二、簽發(fā)服務(wù)器端證書(shū)(右邊藍(lán)色背景部分)
CA證書(shū)還可以用于簽發(fā)子證書(shū)(數(shù)字證書(shū)),下面我們就模擬簽發(fā)一個(gè)服務(wù)端證書(shū)。仍然需要先創(chuàng)建一個(gè)服務(wù)器端私鑰server-key.pem
openssl genrsa -out server-key.pem 4096
創(chuàng)建服務(wù)器端CSRserver.csr
,該文件作為向授權(quán)機(jī)構(gòu)申請(qǐng)簽發(fā)子證書(shū)的申請(qǐng)文件
openssl req -subj "/CN=192.168.1.111" -sha256 -new -key server-key.pem -out server.csr
模擬授權(quán)機(jī)構(gòu)創(chuàng)建配置文件,serverAuth
表示服務(wù)端證書(shū)
echo subjectAltName = IP:192.168.1.111,IP:0.0.0.0 >> extfile.cnf echo extendedKeyUsage = serverAuth >> extfile.cnf
創(chuàng)建服務(wù)器端證書(shū)會(huì)提示輸入密碼,輸入上文中設(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個(gè)文件ca.srl、server-cert.pem,我們需要的是server-cert.pem
作為服務(wù)端CA證書(shū)
三、簽發(fā)客戶端證書(shū)(左邊黃色背景的部分)
下面我們就模擬簽發(fā)一個(gè)客戶端證書(shū)。仍然需要先創(chuàng)建一個(gè)客戶端私鑰key.pem
openssl genrsa -out key.pem 4096
創(chuàng)建客戶端CSRclient.csr
,該文件作為向授權(quán)機(jī)構(gòu)申請(qǐng)簽發(fā)子證書(shū)的申請(qǐng)文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
模擬授權(quán)機(jī)構(gòu)創(chuàng)建配置文件,clientAuth
表示客戶端證書(shū)
echo extendedKeyUsage = clientAuth >> extfile.cnf
執(zhí)行下列命令同樣會(huì)提示輸入密碼,生成2個(gè)文件ca.srl
、cert.pem
,我們需要的是cert.pem
作為客戶端證書(shū)
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
四、簽發(fā)證書(shū)收尾工作
刪除證書(shū)簽發(fā)請(qǐng)求文件,已經(jīng)失去用處。
rm -v client.csr server.csr
為上文中生成的各種證書(shū)授予文件訪問(wèn)權(quán)限。
chmod -v 0400 ca-key.pem key.pem server-key.pem; chmod -v 0444 ca.pem server-cert.pem cert.pem;
查看CA證書(shū)有效期
# 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ù)端配置證書(shū),分別是ca.pem、server-cert.pem、server-key.pem。將這三個(gè)文件放入/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配置使用客戶端證書(shū)
我們?cè)贗DEA docker插件客戶端證書(shū)配置處做如下選擇:“File -> Settings -> Build、Execution、Deployment -> Docker”
- Engine API URL的位置寫(xiě)
https://<ip>:2375
,記住是https,不是http,也不是tcp - 將客戶端的需要的三個(gè)證書(shū)文件ca.pem、cert.pem、key.pem放入一個(gè)目錄下,并使選擇該目錄作為Certificates folder。
到此這篇關(guān)于docker API管理接口增加CA安全認(rèn)證的文章就介紹到這了,更多相關(guān)docker 增加CA安全認(rèn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker部署php運(yùn)行環(huán)境(php-fpm+nginx)
Docker?是一種流行的容器化平臺(tái),可以幫助開(kāi)發(fā)人員快速創(chuàng)建、部署和管理容器化應(yīng)用程序,本文將介紹如何使用?Docker?搭建?PHP?開(kāi)發(fā)環(huán)境服務(wù)器,讓您能夠輕松地開(kāi)始?PHP?開(kāi)發(fā)工作,感興趣的可以了解一下2023-11-11Docker 阿里云鏡像倉(cāng)庫(kù)CR使用小結(jié)
阿里云提供了免費(fèi)的容器鏡像服務(wù),更重要的是支持公開(kāi)和私有倉(cāng)庫(kù),本文主要介紹了Docker 阿里云鏡像倉(cāng)庫(kù)CR使用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02Docker?Compose與Docker鏡像倉(cāng)庫(kù)詳解
Docker?Compose可以基于Compose文件幫我們快速的部署分布式應(yīng)用,而無(wú)需手動(dòng)一個(gè)個(gè)創(chuàng)建和運(yùn)行容器,這篇文章主要介紹了Docker?Compose與Docker鏡像倉(cāng)庫(kù),需要的朋友可以參考下2023-03-03Centos7安裝Docker(2020最新親測(cè)可用,直接復(fù)制粘貼即可)
這篇文章主要介紹了Centos7安裝Docker(2020最新親測(cè)可用,直接復(fù)制粘貼即可),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Docker容器通過(guò)獨(dú)立IP暴露給局域網(wǎng)的方法
這篇文章主要介紹了Docker容器通過(guò)獨(dú)立IP暴露給局域網(wǎng)的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04docker 查詢或獲取私有倉(cāng)庫(kù)(registry)中的鏡像的方法
這篇文章主要介紹了docker 查詢或獲取私有倉(cāng)庫(kù)(registry)中的鏡像的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05Docker 搭建 Tomcat 運(yùn)行環(huán)境的方法
這篇文章主要介紹了Docker 搭建 Tomcat 運(yùn)行環(huán)境的方法,Docker與虛擬機(jī)及搭建過(guò)程,介紹的非常詳細(xì),需要的朋友可以參考下2016-10-10