首页  >  文章  >  后端开发  >  为什么我的 Go MongoDB 连接抛出 x509 证书错误,如何使用 SAN 修复它?

为什么我的 Go MongoDB 连接抛出 x509 证书错误,如何使用 SAN 修复它?

Barbara Streisand
Barbara Streisand原创
2024-10-30 12:33:03595浏览

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:

[ 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

验证证书

使用 OpenSSL 检查生成的服务器证书:

<code class="sh">openssl x509 -in server.crt -noout -text</code>

证书现在应包含 SAN 部分:

X509v3 Subject Alternative Name: 
    DNS:myserver.com

通过更新使用 SAN 的证书后,TLS 连接现在应该成功建立,而不会触发与旧版 CN 字段相关的错误消息。

以上是为什么我的 Go MongoDB 连接抛出 x509 证书错误,如何使用 SAN 修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn