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 형식으로 변환해서 실제 서버에 인증서 파일 열어서 대조해보니 같게 나왔음.
답글 남기기