?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
在用HTTPS運(yùn)行碼頭您了解到,默認(rèn)情況下,Docker通過(guò)非聯(lián)網(wǎng)的Unix套接字運(yùn)行,為了讓Docker客戶端和守護(hù)進(jìn)程在HTTPS上安全地通信,必須啟用TLS。TLS確保注冊(cè)表端點(diǎn)的真實(shí)性,并加密到/來(lái)自注冊(cè)表的通信量。
本文演示如何確保Docker注冊(cè)表(即服務(wù)器)與Docker守護(hù)進(jìn)程(即客戶端)之間的流量已加密,并使用基于證書的客戶端 - 服務(wù)器身份驗(yàn)證進(jìn)行了正確的身份驗(yàn)證。
我們將向您展示如何為注冊(cè)表安裝證書頒發(fā)機(jī)構(gòu)(CA)根證書以及如何設(shè)置客戶端TLS證書以進(jìn)行驗(yàn)證。
通過(guò)/etc/docker/certs.d
使用與注冊(cè)表主機(jī)名相同的名稱(例如,localhost
)創(chuàng)建目錄來(lái)配置自定義證書。所有*.crt
文件都作為CA根添加到此目錄。
注意:從Docker 1.13開始,在Linux上,任何根證書頒發(fā)機(jī)構(gòu)都將與系統(tǒng)默認(rèn)值(即主機(jī)的根CA集合)合并。在1.13和Windows之前,只有在沒(méi)有提供自定義根證書時(shí)才會(huì)使用系統(tǒng)默認(rèn)證書。
一個(gè)或多個(gè)的存在<filename>.key/cert
對(duì)向Docker表示,訪問(wèn)所需的存儲(chǔ)庫(kù)需要自定義證書。
注意:如果有多個(gè)證書,將按字母順序嘗試每個(gè)證書。如果存在認(rèn)證錯(cuò)誤(例如403,404,5xx等),Docker將繼續(xù)嘗試使用下一個(gè)證書。
以下說(shuō)明了具有自定義證書的配置:
/etc/docker/certs.d/ <-- Certificate directory └── localhost:5000 <-- Hostname:port ├── client.cert <-- Client certificate ├── client.key <-- Client key └── ca.crt <-- Certificate authority that signed the registry certificate
前面的示例是特定于操作系統(tǒng)的,僅用于說(shuō)明性目的。在創(chuàng)建操作系統(tǒng)提供的捆綁證書鏈時(shí),您應(yīng)該參考操作系統(tǒng)文檔。
您將使用OpenSSL的genrsa
和req
命令首先生成RSA密鑰,然后使用密鑰創(chuàng)建證書。
$ openssl genrsa -out client.key 4096$ openssl req -new -x509 -text -key client.key -out client.cert
注這些TLS命令將只在Linux上生成一組有效的證書。MacOS中的OpenSSL版本與Docker要求的證書類型不兼容。
Docker守護(hù)進(jìn)程解釋.crt
文件作為CA證書和.cert
文件作為客戶端證書。如果CA證書意外地被授予擴(kuò)展名.cert
而不是正確的.crt
擴(kuò)展時(shí),Docker守護(hù)進(jìn)程記錄以下錯(cuò)誤消息:
Missing key KEY_NAME for client certificate CERT_NAME. Note that CA certificates should use the extension .crt.
如果沒(méi)有端口號(hào)訪問(wèn)Docker注冊(cè)表,請(qǐng)不要將端口添加到目錄名。下面顯示默認(rèn)端口443上注冊(cè)表的配置,docker login my-https.registry.example.com
*
/etc/docker/certs.d/ └── my-https.registry.example.com <-- Hostname without port ├── client.cert ├── client.key └── ca.crt
使用可信映像
保護(hù)Docker守護(hù)進(jìn)程套接字