Golang으로 서버에서 PUBLIC KEY랑 CERTIFICATE 추출하기

rsa 이것저것 찾아보다가 블로그 공개키랑 인증서 가져오는거 찾아보고 여기 정리 해둠.

conf := &tls.Config{
    InsecureSkipVerify: true,
}

conn, err := tls.Dial("tcp", "linsoo.pe.kr:443", conf)
if err != nil {
    log.Println("Server doesn't support SSL certificate err: " + err.Error())
}
defer conn.Close()

원하는 URL에 연결함.

certs := conn.ConnectionState().PeerCertificates
for _, cert := range certs {
    fmt.Println("---------------------------------------------------")
    fmt.Println("Issuer Name: ", cert.Issuer)
    fmt.Println("Expiry: ", cert.NotAfter.Format("2006-January-02"))
    fmt.Println("Common Name: ", cert.Issuer.CommonName)

    //Public Key PEM 형식으로 추출
    asn1Bytes, err := x509.MarshalPKIXPublicKey(cert.PublicKey)
    if err != nil {
        log.Println(err)
    }
    var pemkey = &pem.Block{
        Type:  "PUBLIC KEY",
        Bytes: asn1Bytes,
    }
    fmt.Println(string(pem.EncodeToMemory(pemkey)))

    //이건 인증서를 PEM 형식으로 변환
    pemkey = &pem.Block{
        Type:  "CERTIFICATE",
        Bytes: cert.Raw,
    }
    fmt.Println(string(pem.EncodeToMemory(pemkey)))
}

코드 돌려보면 cert 가 3개로 나오는데 (인증서 마다 다를수 있음)

제 블로그 인증서 보면 R3->ISRG Root X1->DST Root CA X3 이렇게 3개 있는거가 순서대로 나옵니다. (배열첫번째가 R3)

제대로 받은건지 PEM 형식으로 변환해서 실제 서버에 인증서 파일 열어서 대조해보니 같게 나왔음.

 

크리에이티브 커먼즈 라이선스 Linsoo 의 저작물인 이 저작물은(는) 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.