了解 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 = "generated by https://github.com/me/my-pki" 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
驗證憑證
<code class="sh">openssl x509 -in server.crt -noout -text</code>
X509v3 Subject Alternative Name: DNS:myserver.com
以上是為什麼我的 Go MongoDB 連線拋出 x509 憑證錯誤,如何使用 SAN 修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!