>백엔드 개발 >Golang >Go의 X509 인증서에서 전체 주체 또는 발급자 DN을 추출하는 방법은 무엇입니까?

Go의 X509 인증서에서 전체 주체 또는 발급자 DN을 추출하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-31 12:25:30813검색

How to Extract the Complete Subject or Issuer DN from an X509 Certificate in Go?

Go의 X509 인증서에서 전체 주체 또는 발급자 DN 검색

X509 인증서에서 전체 주체 또는 발급자 고유 이름(DN) 검색 몇 단계를 거쳐 문자열로 변환할 수 있습니다.

솔루션 세부 정보:

  1. OID를 속성 이름에 매핑:

    • OID(객체 식별자)를 속성 이름에 연결하는 맵을 생성합니다.
  2. RDNSequence를 문자열로 변환:

    • RDNSequence(Relative Distinguished Name Sequence)를 문자열 조각으로 변환합니다. 여기서 각 문자열은 속성(예: "CN=common name")을 나타냅니다.
  3. 주제 DN 문자열 작성:

    • 문자열 조각을 반복하고 속성 이름과 값을 연결하여 제목 DN 문자열을 작성합니다.
  4. 함수 호출:

    • 인증서 주체 또는 발급자를 인수로 사용하여 getDNFromCert 함수를 호출합니다.

사용 예:

<code class="go">func main() {
    // Obtain the X509 certificate
    x509Cert, err := LoadCert(pemBytes)
    if err != nil {
        // Handle error
    }

    // Retrieve subject DN
    subj, err := getDNFromCert(x509Cert.Subject, "/")
    if err != nil {
        // Handle error
    }

    fmt.Println("Subject DN:", subj)
}</code>

함수 정의:

<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 {
                subject = append(subject, fmt.Sprintf("%v=%v", i.Type.String(), v))
            } else {
                subject = append(subject, fmt.Sprintf("%v=%v", i.Type.String(), i.Value))
            }
        }
    }
    return sep + strings.Join(subject, sep), nil
}</code>

예상 출력:

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

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

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