了解 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 = "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
验证证书
使用 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中文网其他相关文章!