一、–insecure-registry是什麼
–insecure-registry是docker中用來設置與docker registry通信的安全限制的一個參數,如果設置為true或1,意味著Docker將會在與這個registry通信時跨過證書問題,不再驗證registry的TLS認證證書,可以忽略證書錯誤,從而繞過Docker安全機制。
這個參數的使用主要是為了方便在開發過程中迅速測試鏡像,或者當運行docker的主機不具備安全加密能力的時候,可以選擇打開這個開關。
在正式的生產環境中,一般情況下禁用這個選項,因為這個選項的打開為我們的系統帶來很大的安全隱患。
二、如何使用–insecure-registry
使用–insecure-registry,我們可以在運行docker命令時添加這個參數。
docker run --rm --insecure-registry registry.local:5000 busybox
在上面的命令中,我們通過–insecure-registry參數指定了registry的地址為registry.local:5000,這意味著docker將會忽略registry.local:5000的SSL證書認證。
在Docker 1.13.1及之後的版本中,可以使用以下的方式來配置–insecure-registry的默認值:
{ "insecure-registries" : ["registry.local:5000"] }
這個配置文件需要保存為 /etc/docker/daemon.json。
需要注意的是,在Windows操作系統中,這個配置文件需要在C:\ProgramData\Docker\config目錄下創建。
三、–insecure-registry的安全風險
雖然使用–insecure-registry參數可以幫助我們快速測試鏡像,但是打開這個選項也帶來了很大的安全風險。
當我們忽略SSL證書時,意味著所有與該registry通信的數據都是明文傳輸,容易受到中間人攻擊。黑客可以通過在通信過程中截取傳輸的數據,來獲取敏感信息或者篡改數據。
同時,如果registry伺服器本身被黑客攻擊,會助長黑客利用中間人攻擊的可能性,可以通過域名欺騙等方式進行攻擊。
四、–insecure-registry的替代方案
如果我們有必要經常使用–insecure-registry,可以選擇使用內部CA證書,將證書寫入docker TLS認證證書池中,實現相對的安全性。這個過程需要創建自簽名證書來為docker registry簽名。
下面是一個創建自簽名證書的例子:
openssl genrsa -out key.pem 2048 openssl req -new -key key.pem -out csr.pem openssl x509 -req -in csr.pem -signkey key.pem -out cert.crt
執行完上面的命令,會生成三個文件:key.pem、csr.pem、cert.crt,其中cert.crt就是我們創建的自簽名證書。我們將cert.crt拷貝到所有需要訪問registry的docker客戶端主機上,然後重新啟動docker服務。
當我們在運行docker命令時,可以使用–tlsverify參數打開docker TLS驗證。我們可以將上面生成的key.pem,csr.pem,cert.crt放在伺服器的某個目錄中,然後使用以下命令啟動docker:
docker --tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/cert.pem --tlskey=/path/to/key.pem -H=127.0.0.1:5555 version
通過使用–tlsverify參數,在與registry通信時,Docker將會驗證認證證書的有效性,實現了更高的安全性。
五、總結
–insecure-registry是Docker中用來臨時繞過TLS認證證書認證的參數,可以在開發、測試過程中節省時間和精力。但是在生產環境中,為了保證系統的安全性,我們需要關閉這個參數。
如果確實有必要經常使用這個參數,我們可以選擇使用內部CA證書來實現相對的安全性。
在使用–insecure-registry時,我們需要時刻注意安全風險,並採取相應的防範措施。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/282611.html