[CentOS/Ubuntu] 執行 Docker login 時,出現 certificate signed by unknown authority 的錯誤訊息?
News from: EPH 程式設計日記
今天想把做好的 Docker 映象檔 (image),上傳到公司的 Docker 儲存庫 (repository) 裡面。
結果一執行 docker login ,就出現 x509: certificate signed by unknown authority 的錯誤訊息:
結果一執行 docker login ,就出現 x509: certificate signed by unknown authority 的錯誤訊息:
這個訊息最近才看過,應該是因為那台 CentOS / Ubuntu機器上,沒有安裝網站的 HTTPS 憑證的 Root CA…要怎樣才能讓 Docker 認得那個 Root CA 呢?
1. 下載網站的 Root CA 憑證
我們可以使用 openssl 指令,來列出某個 HTTPS 網站用到的憑證,以及其相關的簽發憑證鍊。像下面是列出 www.google.com 的憑證鍊:
$ openssl s_client -connect www.google.com:443 -showcerts
openssl 列出的憑證順序,是由網站的憑證,一路往上層的 CA,一直到 Root CA 為止。
因此簽發的順序是 GlobalSign Root CA -> GTS Root R1 -> GTS CA 1C3 -> www.google.com。
因此簽發的順序是 GlobalSign Root CA -> GTS Root R1 -> GTS CA 1C3 -> www.google.com。
這個 GlobalSign Root CA,就是本次的最上層 Root CA。
把它對應的
-----BEGIN CERTIFICATE-----
到 -----END CERTIFICATE-----
間的內容,儲存成一個文字檔,就是 Root CA 的憑證了:
上面是拿 www.google.com 舉例,公司的儲存庫的 Root CA 事實上是另外一家喔。
2. 將 Root CA 憑證更新至 Linux 信任的 Root CA 庫
將剛剛的 Root CA 憑證,儲存到 /etc/pki/ca-trust/source/anchors 目錄下。
檔案名稱可以自己取,不過為了方便對照,可以取成 <Root CA name>.pem 比較容易看。
接著,執行
sudo update-ca-trust
指令,這會將 /etc/pki/ca-trust/source/anchors 下所有的憑證,
都加到 /etc/pki/tls/certs/ca-bundle.crt 裡面。
這樣子,我們新加入的 Root CA 應該就已經被這台 CentOS/Ubuntu 所信任了。
3. 重啟 Docker 服務
將 Docker 服務重啟,確保它可以讀到新的 Root CA 集合:
systemctl restart docker
4. 重新登入遠端 Docker 儲存庫
重新執行一次
docker login
指令這時已經可以成功連上遠端儲存庫了,表示這個儲存庫用到的 Root CA 確實已經被系統信任:
留言
張貼留言