>  기사  >  백엔드 개발  >  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 인증서가 SAN(주체 대체 이름) 대신 레거시 CN(일반 이름) 필드를 사용할 때 발생합니다.

해결책: 인증서에 SAN 사용

이 문제를 해결하려면 CN 필드 대신 SAN을 사용하여 인증서를 다시 생성해야 합니다. 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이 있는 인증서를 사용하면 이제 레거시 CN 필드와 관련된 오류 메시지를 트리거하지 않고 TLS 연결이 성공적으로 설정됩니다.

위 내용은 Go MongoDB 연결에서 x509 인증서 오류가 발생하는 이유는 무엇이며 SAN을 사용하여 문제를 해결하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.