
错误:使用旧通用名称字段连接到服务器
尝试使用 Go 建立与 MongoDB 服务器的连接时,您可能会遇到错误:
1 | 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(证书签名请求):
1 2 3 4 5 | openssl req - new \
-subj "${SUBJ_PREFIX}/CN=${DNS}/emailAddress=${EMAIL}" \
-key "${KEY}" \
-addext "subjectAltName = DNS:${DNS}" \
-out "${CSR}"
|
登录后复制
-
与您的根 CA 签署 CSR:
1 2 3 4 5 6 7 8 9 | openssl ca \
-create_serial \
-cert "${ROOT_CRT}" \
-keyfile "${ROOT_KEY}" \
-days "${CERT_LIFETIME}" \
-in "${CSR}" \
-batch \
-config "${CA_CONF}" \
-out "${CRT}"
|
登录后复制
-
检查生成的证书:
1 | openssl x509 -in server.crt -noout -text
|
登录后复制
您现在应该拥有一个带有 SAN 部分的证书,例如:
1 2 | X509v3 Subject Alternative Name:
DNS:myserver.com
|
登录后复制
重新生成证书后,您可以使用它建立与 MongoDB 服务器的安全连接,而不会遇到通用名称错误。
以上是使用 Go 连接到 MongoDB 时如何修复'x509:证书依赖于旧版通用名称字段”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!