首頁 > 後端開發 > Golang > 為什麼我的 Go MongoDB 連線拋出 x509 憑證錯誤,如何使用 SAN 修復它?

為什麼我的 Go MongoDB 連線拋出 x509 憑證錯誤,如何使用 SAN 修復它?

Barbara Streisand
發布: 2024-10-30 12:33:03
原創
729 人瀏覽過

Why is my Go MongoDB connection throwing a x509 certificate error, and how can I fix it using SANs?

了解 x509 憑證錯誤

使用 Go 連線到 MongoDB 伺服器時,可能會因為憑證驗證問題而發生錯誤。當用於 TLS 驗證的 x509 憑證依賴舊版公用名稱 (CN) 欄位而不是使用者備用名稱 (SAN) 時,會導致此錯誤。

解決方案:在憑證中使用 SAN

要解決此問題,必須使用 SAN 而不是 CN 欄位重新產生憑證。 SAN 提供了一種更安全、更靈活的方式來識別伺服器的網域或主機名稱。

使用SAN 產生憑證

使用OpenSSL 產生CSR(憑證簽署要求)並使用根CA 進行簽章:

<code class="sh">openssl req -new \
    -subj "${SUBJ_PREFIX}/CN=${DNS}/emailAddress=${EMAIL}" \
            -key "${KEY}" \
    -addext "subjectAltName = DNS:${DNS}" \
    -out "${CSR}"

openssl ca \
        -create_serial \
                -cert "${ROOT_CRT}" \
        -keyfile "${ROOT_KEY}" \
                -days "${CERT_LIFETIME}" \
                -in "${CSR}" \
        -batch \
        -config "${CA_CONF}" \
                -out "${CRT}"</code>
登入後複製

CA 設定

[ ca ]
default_ca      = my_ca

[ my_ca ]
...
copy_extensions = copy

[ my_cert ]
basicConstraints        = CA:FALSE
nsComment               = &quot;generated by https://github.com/me/my-pki&quot;
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid,issuer

[ policy_match ]
# ensure CSR fields match that of delivered Cert
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
登入後複製
使用以下選項設定CA:

驗證憑證

<code class="sh">openssl x509 -in server.crt -noout -text</code>
登入後複製
使用OpenSSL 檢查產生的伺服器憑證:

憑證現在應包含SAN 部分:
X509v3 Subject Alternative Name: 
    DNS:myserver.com
登入後複製

透過更新使用SAN 的憑證後,TLS 連線現在應該成功建立,而不會觸發與舊版CN 欄位相關的錯誤訊息。

以上是為什麼我的 Go MongoDB 連線拋出 x509 憑證錯誤,如何使用 SAN 修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板