[CentOS/Ubuntu] 執行 Docker login 時,出現 certificate signed by unknown authority 的錯誤訊息?

 News from: EPH 程式設計日記

今天想把做好的 Docker 映象檔 (image),上傳到公司的 Docker 儲存庫 (repository) 裡面。
結果一執行  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,就是本次的最上層 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 確實已經被系統信任:


之後再遇到類似憑證不被信任的問題,也可以用同樣的方法來解決囉~




留言

熱門文章