簡體   English   中英

mkcert生成的ssl證書不是全鏈

[英]ssl certificate generated by mkcert is not a full chain

我正在使用mkcert為本地主機生成自簽名證書。

mkcert -install
mkcert localhost

這適用於瀏覽器,但如果我嘗試從節點獲取數據,則會收到此錯誤:

FetchError:請求 https://localhost:52882/ 失敗,原因:無法驗證第一個證書

我認為這是因為 mkcert 沒有創建完整的鏈。

我通過使用NODE_EXTRA_CA_CERTS環境變量解決了這個問題。

NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"

我知道有process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 核方法,但我很想知道如何在沒有這些的情況下解決這個問題。

它運行良好。 您擁有自己的證書頒發機構 (CA),並且該頒發機構直接頒發localhost證書。 沒有使用中間證書頒發機構,因此假設mkcert is not creating the full chain是不正確的。

CA 證書必須在您的機器上可用,您需要定義哪些 CA 證書是值得信賴的。 NODE_EXTRA_CA_CERTS正是該配置,您可以在其中允許特定的 CA 證書文件。

當然,您可以將此自定義 CA 證書添加到系統 CA 證書存儲中。 它們的位置取決於使用的操作系統,例如:

   "/etc/ssl/certs/ca-certificates.crt",                // Debian/Ubuntu/Gentoo etc.
    "/etc/pki/tls/certs/ca-bundle.crt",                  // Fedora/RHEL 6
    "/etc/ssl/ca-bundle.pem",                            // OpenSUSE
    "/etc/pki/tls/cacert.pem",                           // OpenELEC
    "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", // CentOS/RHEL 7
    "/etc/ssl/cert.pem",                                 // Alpine Linux

這應該由mkcert -install完成。

我的猜測是您的節點沒有使用系統 CA 存儲(環境變量NODE_OPTIONS=--use-openssl-ca ),因此只有節點自己的 CA 證書(例如https://github.com/nodejs/node/blob/v14.x )。 0.0/src/node_root_certs.h ) 對節點來說是值得信賴的。

您可以選擇使用系統 CA 證書存儲(環境變量NODE_OPTIONS=--use-openssl-ca或節點 CLI 參數--use-openssl-ca ),或者您可以像您一樣使用環境變量NODE_EXTRA_CA_CERTS允許自定義 CA。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM