[go] go 언어에서 PEM 사용하기

go 언어에는 TLS(Transport Layer Security) 연결을 설정하고 서버와 안전하게 통신하는데 사용되는 PEM(Privacy Enhanced Mail) 형식의 인증서와 개인 키를 사용할 수 있습니다. 이 포스트에서는 go 언어에서 PEM을 사용하는 방법에 대해 알아보겠습니다.

PEM 형식

PEM 파일은 일반적으로 경로에 있는 텍스트 파일이며, X.509 형식의 공개 키 인증서와 개인 키를 포함할 수 있습니다. 인증서는 주로 .crt 또는 .pem 확장자를 가지며, 개인 키는 .key 또는 .pem 확장자를 가집니다.

PEM 파일 읽기

go 언어에서 PEM 파일을 읽고 TLS 연결을 설정하려면 crypto/tls 패키지를 사용할 수 있습니다. 아래는 PEM 파일을 읽는 방법과 TLS 연결을 설정하는 예제 코드입니다.

package main

import (
	"crypto/tls"
	"crypto/x509"
	"io/ioutil"
)

func main() {
	cert, err := ioutil.ReadFile("server.crt")
	if err != nil {
		panic(err)
	}
	
	key, err := ioutil.ReadFile("server.key")
	if err != nil {
		panic(err)
	}

	certPool := x509.NewCertPool()
	certPool.AppendCertsFromPEM(cert)

	tlsConfig := &tls.Config{
		RootCAs: certPool,
	}
}

위의 코드에서는 ioutil.ReadFile 함수를 사용하여 PEM 파일을 읽고, x509.NewCertPool 함수를 사용하여 PEM 데이터를 해독하고 tls.Config 구조체를 설정하는 방법을 보여줍니다.

TLS 연결 설정

TLS 연결을 설정하여 서버와 안전한 통신을 하려면 net/http 또는 net 패키지를 사용하여 클라이언트를 만들고 Client 구조체의 Transport 필드에 tlsConfig를 제공하면 됩니다.

package main

import (
	"crypto/tls"
	"net/http"
	"time"
)

func main() {
	tlsConfig := &tls.Config{
		RootCAs: certPool,
	}

	tr := &http.Transport{
		TLSClientConfig: tlsConfig,
	}

	client := &http.Client{
		Transport: tr,
		Timeout:   time.Second * 10,
	}
	// 사용할 클라이언트를 만들고 HTTP 요청을 수행
}

위의 코드에서는 tlsConfighttp.Transport 구조체에 전달하고, 이를 사용하여 http.Client를 만들어 안전한 통신을 하도록 설정하는 방법을 보여줍니다.

이제 go 언어에서 PEM 파일을 사용하여 안전한 통신을 하는 방법에 대해 알게 되었습니다. PEM 파일을 읽어서 TLS 연결을 설정하는 것은 go 언어에서 안전한 네트워크 통신을 구현하는 중요한 단계입니다.

참고 자료


PEM 파일을 사용하여 go 언어에서 안전한 통신을 설정하는 방법에 대해 알아보았습니다. PEM 파일을 사용하면 클라이언트와 서버 간의 안전한 통신을 보장할 수 있습니다.