Maison >développement back-end >Golang >Pourquoi ma connexion Go MongoDB génère-t-elle une erreur de certificat x509 et comment puis-je la corriger à l'aide des SAN ?

Pourquoi ma connexion Go MongoDB génère-t-elle une erreur de certificat x509 et comment puis-je la corriger à l'aide des SAN ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 12:33:03725parcourir

Why is my Go MongoDB connection throwing a x509 certificate error, and how can I fix it using SANs?

Comprendre l'erreur de certificat x509

Lors de la connexion à un serveur MongoDB à l'aide de Go, une erreur peut se produire en raison de problèmes de validation de certificat. Cette erreur se produit lorsque le certificat x509 utilisé pour l'authentification TLS s'appuie sur l'ancien champ Common Name (CN) au lieu des noms alternatifs du sujet (SAN).

Solution : Utilisation de SAN dans les certificats

Pour résoudre ce problème, le certificat doit être régénéré avec les SAN au lieu du champ CN. Les SAN offrent un moyen plus sécurisé et flexible d'identifier le domaine ou le nom d'hôte du serveur.

Générer un certificat avec les SAN

Utilisez OpenSSL pour générer une CSR (demande de signature de certificat) et signez-le avec l'autorité de certification racine :

<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>

Configuration de l'autorité de certification

Configurez l'autorité de certification avec les options suivantes :

[ 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

Vérification du certificat

Inspectez le certificat de serveur obtenu à l'aide d'OpenSSL :

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

Le certificat doit maintenant inclure une section SAN :

X509v3 Subject Alternative Name: 
    DNS:myserver.com

En mettant à jour les certificats avec les SAN, la connexion TLS devrait maintenant s'établir avec succès sans déclencher le message d'erreur lié au champ CN hérité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn