[go] PEM 문자열의 해독과 디코딩

PEM 파일은 다음과 같이 인코딩됨으로써 텍스트 형식으로 정보를 저장합니다.

-----BEGIN CERTIFICATE-----
MIIDCTCCAfGgAwIBAgIUN0pCeEr4Vbmhsv2vxrvH7jh4EwwDQYJKoZIhvcNAQEL
BQAwgYExCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMQ8wDQYDVQQH
EwZBcml6b25hMREwDwYDVQQKEwhBbGV4YW5kcmUxDzANBgNVBAsTBmFkbWluMRkw
FwYDVQQDExBhY21lLmFkYW1pbjAeFw0yMTA3MTcyMjA4MjhaFw0yMjA3MTkyMjA4
MjhaMGQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHE
wpDYWxpZm9ybmlhMRMwEQYDVQQKEwpDYWxpZm9ybmlhMRMwEQYDVQQDEwpDYWxpZm
9ybmlhMTkwNwYJKoZIhvcNAQkBFiFlbWFpbEBhY21lLmFkYW1pbi51czCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ3E6c6WjZ3hQ9E1W5zrvHc/7JtNsK3/Y
yilzUoDT8Ieu53NExwNJ4h6qYhhbXH71I7MVecx1gK07w6mAwWvN6MPFPaEWkdrX
TBUP0SJ6+Hoyu7/UBp6aAWxfs5Crw6gVdttqB2U5sETLm9VvhrPUcCxBDIirjQ9t
............(이하 생략)............
nrMJYGbs05tjWYhKl+197C5+NlW3Kok0ZQkD5tW5wCAwEAATANBgkqhkiG9w0BAQE
FAAOCAQEAUBpRoGv6Hh4C3MeOSMdU+qM2qJMSdDm+Mq3qcM9dTtF4QLfmf9xzZ+K
O+X9jDx2UAdq7egDdmfWge6hs2a3Lv4E08p+4dRzuQqchd+AnmCn7sfxhkM3PT0M
Hbgk9LVVUU+AC3386I3fst+Qh7pEfa6kZ5KEolJ14dVCpW4u1gSkXoexagyTlWx3
mLJOoGK5AZGJg5leky29mq26nZLGptPwZ9WM19heeN62EJvvkYRJi+VHzG2568w6
MJc3LoWPJfsP4KZJPp7yJUEvax0wb9+u9xNtdYwBcE3ScNiQEY4eXEopRLccCZp5
9v5brXT5JE7CXlnhV2jvhNpIOlufBIg==
-----END CERTIFICATE-----

위의 예시는 X.509 인증서의 PEM 문자열 예시이며, -----BEGIN CERTIFICATE-----로 시작하여 -----END CERTIFICATE-----로 끝납니다.

PEM 문자열은 종종 기밀 정보를 담고 있기 때문에 보안 상 주의할 필요가 있습니다.

따라서 PEM 문자열을 읽고 디코딩하여 정보를 해독하기 위해서는 다음의 단계를 따라야 합니다:

1.PEM 문자열을 Base64 디코딩합니다. 2.디코딩된 데이터를 해석하여 원하는 정보를 추출합니다.

여기서는 Go 언어를 사용하여 PEM 문자열을 디코딩하는 방법에 대해 살펴보겠습니다.

package main

import (
	"crypto/x509"
	"encoding/pem"
	"fmt"
	"log"
)

func main() {
	pemData := []byte(`-----BEGIN CERTIFICATE-----
MIIDCTCCAfGgAwIBAgIUN0pCeEr4Vbmhsv2vxrvH7jh4EwwDQYJKoZIhvcNAQEL
BQAwgYExCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMQ8wDQYDVQQH
EwZBcml6b25hMREwDwYDVQQKEwhBbGV4YW5kcmUxDzANBgNVBAsTBmFkbWluMRkw
FwYDVQQDExBhY21lLmFkYW1pbjAeFw0yMTA3MTcyMjA4MjhaFw0yMjA3MTkyMjA4
MjhaMGQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRMwEQYDVQQHE
wpDYWxpZm9ybmlhMRMwEQYDVQQKEwpDYWxpZm9ybmlhMRMwEQYDVQQDEwpDYWxpZm
9ybmlhMTkwNwYJKoZIhvcNAQkBFiFlbWFpbEBhY21lLmFkYW1pbi51czCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ3E6c6WjZ3hQ9E1W5zrvHc/7JtNsK3/Y
yilzUoDT8Ieu53NExwNJ4h6qYhhbXH71I7MVecx1gK07w6mAwWvN6MPFPaEWkdrX
TBUP0SJ6+Hoyu7/UBp6aAWxfs5Crw6gVdttqB2U5sETLm9VvhrPUcCxBDIirjQ9t
............(이하 생략)............
nrMJYGbs05tjWYhKl+197C5+NlW3Kok0ZQkD5tW5wCAwEAATANBgkqhkiG9w0BAQE
FAAOCAQEAUBpRoGv6Hh4C3MeOSMdU+qM2qJMSdDm+Mq3qcM9dTtF4QLfmf9xzZ+K
O+X9jDx2UAdq7egDdmfWge6hs2a3Lv4E08p+4dRzuQqchd+AnmCn7sfxhkM3PT0M
Hbgk9LVVUU+AC3386I3fst+Qh7pEfa6kZ5KEolJ14dVCpW4u1gSkXoexagyTlWx3
mLJOoGK5AZGJg5leky29mq26nZLGptPwZ9WM19heeN62EJvvkYRJi+VHzG2568w6
MJc3LoWPJfsP4KZJPp7yJUEvax0wb9+u9xNtdYwBcE3ScNiQEY4eXEopRLccCZp5
9v5brXT5JE7CXlnhV2jvhNpIOlufBIg==
-----END CERTIFICATE-----`)
	block, _ := pem.Decode(pemData)
	if block == nil {
		log.Fatalln("failed to parse PEM block containing the certificate")
	}
	cert, err := x509.ParseCertificate(block.Bytes)
	if err != nil {
		log.Fatalf("failed to parse certificate: %s", err)
	}
	fmt.Printf("Subject: %s\n", cert.Subject)
	fmt.Printf("Issuer: %s\n", cert.Issuer)
}

위의 예제 코드에서는 Go의 crypto/x509encoding/pem 패키지를 사용하여 PEM 문자열을 해석하고, 이를 통해 X.509 인증서의 주체와 발급자 정보를 출력하여서 PEM 문자열을 해독하는 방법을 보여주고 있습니다.

이를 통해 PEM 문자열을 Base64로 디코딩하고, 필요한 정보를 추출하는 방법을 확인할 수 있습니다.

이제 PEM 문자열을 디코딩하고 정보를 해독하는 것에 대해 더 깊게 이해하게 되었습니다. 관련 질문이 있으면 언제든지 물어보세요!