错误:使用旧通用名称字段连接到服务器
尝试使用 Go 建立与 MongoDB 服务器的连接时,您可能会遇到错误:
failed to connect: x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0
此错误表示用于 TLS 身份验证的证书包含通用名称 (CN) 字段,但缺少必要的主题备用名称 (SAN) 字段。 Go 的 TLS 实现在最近的版本中变得更加严格,现在它更倾向于 SAN 而不是 CN 来进行主机验证。
根本原因:
此错误的根本原因在于用于 TLS 身份验证的 SSL 证书配置错误。证书应具有与 MongoDB 服务器的主机名或 IP 地址匹配的 DNS SAN 字段。
解决方案:
要解决此错误,您需要重新生成 SSL带有 DNS SAN 字段的证书。这可以通过以下步骤来实现:
创建 CSR(证书签名请求):
openssl req -new \ -subj "${SUBJ_PREFIX}/CN=${DNS}/emailAddress=${EMAIL}" \ -key "${KEY}" \ -addext "subjectAltName = DNS:${DNS}" \ -out "${CSR}"
与您的根 CA 签署 CSR:
openssl ca \ -create_serial \ -cert "${ROOT_CRT}" \ -keyfile "${ROOT_KEY}" \ -days "${CERT_LIFETIME}" \ -in "${CSR}" \ -batch \ -config "${CA_CONF}" \ -out "${CRT}"
检查生成的证书:
openssl x509 -in server.crt -noout -text
您现在应该拥有一个带有 SAN 部分的证书,例如:
X509v3 Subject Alternative Name: DNS:myserver.com
重新生成证书后,您可以使用它建立与 MongoDB 服务器的安全连接,而不会遇到通用名称错误。
以上是使用 Go 连接到 MongoDB 时如何修复'x509:证书依赖于旧版通用名称字段”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!