>  기사  >  백엔드 개발  >  Go의 X.509 인증서에서 전체 주체 고유 이름을 추출하는 방법은 무엇입니까?

Go의 X.509 인증서에서 전체 주체 고유 이름을 추출하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-01 02:18:02267검색

How to Extract the Full Subject Distinguished Name from an X.509 Certificate in Go?

Go의 X509 인증서에서 전체 주체 DN을 추출하는 방법

X509 인증서에서 주체 DN(고유 이름) 또는 발급자 DN 얻기 Go에서는 문자열로 사용하는 것이 어려울 수 있습니다. 하지만 이 작업을 단순화할 수 있는 편리한 방법이 있습니다.

솔루션

동료의 기여 덕분에 getDNFromCert라는 사용자 정의 함수가 개발되어 추출을 수행했습니다. X509 인증서의 전체 DN. 이 함수는 pkix.Name 네임스페이스를 입력으로 사용하고 DN의 문자열 표현을 반환합니다.

<code class="go">func getDNFromCert(namespace pkix.Name, sep string) (string, error) {
    subject := []string{}
    for _, s := range namespace.ToRDNSequence() {
        for _, i := range s {
            if v, ok := i.Value.(string); ok {
                if name, ok := oid[i.Type.String()]; ok {
                    // <oid name>=<value>
                    subject = append(subject, fmt.Sprintf("%s=%s", name, v))
                } else {
                    // <oid>=<value> if no <oid name> is found
                    subject = append(subject, fmt.Sprintf("%s=%s", i.Type.String(), v))
                }
            } else {
                // <oid>=<value in default format> if value is not string
                subject = append(subject, fmt.Sprintf("%s=%v", i.Type.String, v))
            }
        }
    }
    return sep + strings.Join(subject, sep), nil
}</code>

함수 사용

x509Cert라는 X509 인증서의 경우 다음과 같이 getDNFromCert 함수를 호출할 수 있습니다.

<code class="go">subj, err := getDNFromCert(x509Cert.Subject, "/")
if err != nil {
    // Do error handling
}
fmt.Println(subj)</code>

출력 예

다음 제목 DN이 있는 샘플 인증서의 경우:

CN=common name,OU=unit,O=some organization,C=US

getDNFromCert 함수는 다음 문자열을 반환합니다.

/C=US/O=some organization/OU=unit/CN=common name

이 방법은 Go의 X509 인증서에서 전체 주체 또는 발급자 DN을 추출하는 쉽고 효율적인 방법을 제공합니다. 작업을 단순화하고 수동으로 문자열을 조작할 필요가 없습니다.

위 내용은 Go의 X.509 인증서에서 전체 주체 고유 이름을 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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