Firewall

即使使用證書後也無法在本地驗證頒發者的權限

  • June 8, 2020

執行時

wget https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf

我有這個錯誤:

--2020-06-03 20:55:06--  https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf
Resolving docs.conda.io (docs.conda.io)... 104.31.71.166, 104.31.70.166, 172.67.149.185, ...
Connecting to docs.conda.io (docs.conda.io)|104.31.71.166|:443... connected.
ERROR: cannot verify docs.conda.io's certificate, issued by ‘CN=SSL-SG1-GFRPA2,OU=Operations,O=Cloud Services,C=US’:
 Unable to locally verify the issuer's authority.
To connect to docs.conda.io insecurely, use `--no-check-certificate'.

我試圖解決這個問題的方法:

  1. sudo update-ca-certificates -f
  2. 打開url時從瀏覽器導出證書,保存在文件conda.cer中,然後執行openssl x509 -in conda.cer -inform der -outform pem -out conda.pem,再執行:
wget --ca-certificate=conda.pem \
https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf

=> 仍然是同樣的錯誤 3. 將文件放在/etc/ssl/certs, sudo cp conda.pem /etc/ssl/certs=> 下仍然是同樣的錯誤

我知道我可以使用--no-check-certificate,但這不是我想要的。

其他一些網站也會出現此問題。有人知道原因嗎?謝謝。

UPDATE1 我嘗試了以下步驟:1)sudo cp conda.crt /usr/share/ca-certificates/mozilla/

2)sudo vi /etc/ca-certificates.confmozilla/conda.crt在末尾追加

  1. 執行sudo update-ca-certificates -f

  2. 我可以看到在 /etc/ssl/certs 下創建的符號連結,如下所示:conda.pem -> /usr/share/ca-certificates/mozilla/conda.crt

但是,它仍然無法正常工作!

UPDATE2 - 已刪除。請參考更新3

更新 3

上面 URL 中的證書鏈包含 4 個證書。

為了確保不遺漏任何一個,我將所有 4 個證書(即conda1.crt, conda2.crt, conda3.crt, conda4.crt)放入/usr/share/ca-certificates/mozilla/並重複UPDATE1中提到的步驟。

符號連結在 中成功創建/etc/ssl/certs

確認:

openssl verify -no-CAfile -no-CApath -partial_chain -CAfile conda1.pem conda2.pem
conda2.pem: OK

openssl verify -no-CAfile -no-CApath -partial_chain -CAfile conda2.pem conda3.pem
conda3.pem: OK


openssl verify -no-CAfile -no-CApath -partial_chain -CAfile conda3.pem conda4.pem
conda4.pem: OK

結果:wget 仍然失敗


更新4

部分原因找到了

攔截網路的 Bluecoat 服務是根本原因(儘管它對 VM Ubuntu 有問題,但主機 Windows 可以正常使用 ssl)。

這兩個作品(conda1.crt從瀏覽器中提取,應該來自 Bluecoat 服務):

wget --ca-certificates=/etc/ssl/certs/ca-certificates.crt https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf

wget --ca-certificates=conda1.crt https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf

目前狀態

我已按照UPDATE1conda1.crt/etc/ssl/certs描述的步驟進行安裝。被認為是正確的,如UPDATE4中的步驟所示。conda1.crt``wget

但是,即使經過這一步,連接仍然失敗。

如果我強制禁用 Bluecoat 服務,ssl 問題就消失了。

但是,我需要使用 Bluecoat,因此非常感謝在 Bluecoat 下解決問題的任何幫助!

元:不是一個真正的答案,但太多的評論

UPDATE1 我嘗試了以下步驟:

$$ using certs exported by browser that are actually from Bluecoat, not really from conda $$

  1. sudo cp conda.crt /usr/share/ca-certificates/mozilla/

  2. sudo vi /etc/ca-certificates.conf 並在末尾附加 mozilla/conda.crt

3)$$ $$sudo update-ca-certificates -f

  1. 我可以看到在 /etc/ssl/certs 下創建的符號連結,如下所示: conda.pem -> /usr/share/ca-certificates/mozilla/conda.crt

但是,它仍然是不工作![未指定wget --ca-certificates=]

這很令人驚訝。它適用於我在 Ubuntu 18.04 上,使用我的測試證書(因為我當然沒有你的證書)。請注意,每個證書都以/etc/ssl/certs 三種方式放置:(1)“友好”文件名,如 Digicert_something 或 Go_Daddy_whatever 連結回/usr/share/ca-certificates/;(2) 連結到“友好”名稱的“雜湊名稱”,例如3513523f.0 -> DigiCert_Global_Root_CA.pem;(3) 單個連接文件ca-certificates.crt,其中包含所有證書的 PEM 塊,但沒有人類可讀的名稱。wget使用 OpenSSL,它使用來自 (2) 和/或 (3) 的證書數據,具體取決於程式碼 - 我沒有時間下載和閱讀 - 但從來沒有 (1),所以檢查 (1) 不會t證明很多;檢查 (2) 和 (3)。如果這些是正確的,那麼我會嘗試openssl s_client它應該使用相同的信任庫和邏輯,但提供有關它發現的任何問題的更詳細資訊(被許多其他資訊混亂)。如果這沒有幫助,我認為您必須獲取 wget 的原始碼,使用符號重建並調試它,這實在是太費力了。

也就是說,雖然 update-ca-certificates(1) 聯機幫助頁只是順便提及它,但我認為他們打算讓您添加內容,/usr/local/share/ca-certificates而不是/usr/share/ca-certificates/mozilla因為後者由包管理器維護,而前者在/usr/local其中傳統上和每層(7)的站點或機器本地添加。/usr/share/doc/ca-certificates/README.Debian更具體:

If you want to install local certificate authorities to be implicitly
trusted, please put the certificate files as single files ending with
".crt" into /usr/local/share/ca-certificates/ and re-run
'update-ca-certificates'.  ...

一些小問題

從瀏覽器導出證書 … 和openssl x509 -inform der -outform pem ....

Windows 上的 Chrome 和 Internet Explorer 使用 Windows 的“證書嚮導”(或其中之一),它允許在 DER 或“base-64”(實際上是 PEM)以及“p7b”中導出單個證書允許整個鏈條。(它還可以選擇包含自己證書的私鑰,但這不適用於此處。)Firefox 允許相同的選擇,以及 PEM 中的鏈。AFAIK only Edge 僅限於在 DER 中導出,並且需要轉換步驟——至少是我目前擁有的版本;Edge 應該在今年年初加入 Chromium,但我不知道我是否真的這樣做了,因為 W10 的理念是防止你知道,更不用說控制你的電腦上發生的事情。

$$ interception causes $$僅 VM Ubuntu 的問題,主機視窗工作正常……

主機是否由網路所有者擁有或管理?例如,機器和網路都是企業的嗎*?*如果是這樣,在安裝像 Bluecoat 這樣的攔截器以在需要信任它的機器上自動安裝根證書時很常見——尤其是可以使用“域”和“組策略”輕鬆集中管理的 Windows 機器。(請注意,這種類型的 Windows 域與 Internet 上使用的“域名”和“域名系統 DNS”無關——不要混淆它們。)一個簡單的信號是,如果您的登錄名不是一個簡單的名字喜歡fred或電子郵件喜歡fred@outlook.com,但在形式domain\fred

引用自:https://unix.stackexchange.com/questions/590709