[英]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.