2017-10-13 7 views
2

私はPythonのssl.get_server_certificate()に似た関数を見つけようとしています。これはホスト名とポートのペアを取り、PEMでエンコードされた証明書を返しますが、私は運がありませんでした。URLから証明書を取得するにはどうすればよいですか?

私はかなり掘り下げましたが、私が見つけた最も近い質問(Get remote ssl certificate in golang)は役に立たなかったし、パッケージcrypto/tlsのドキュメントも読んでいませんでした。私は行くために新しいので、私は、ドキュメントに何かを理解していない可能性があり

答えて

4
import (
    "bytes" 
    "crypto/tls" 
    "encoding/pem" 
) 

func GetCertificatesPEM(address string) (string, error) { 
    conn, err := tls.Dial("tcp", address, &tls.Config{ 
     InsecureSkipVerify: true, 
    }) 
    if err != nil { 
     return "", err 
    } 
    defer conn.Close() 
    var b bytes.Buffer 
    for _, cert := range conn.ConnectionState().PeerCertificates { 
     err := pem.Encode(&b, &pem.Block{ 
      Type: "CERTIFICATE", 
      Bytes: cert.Raw, 
     }) 
     if err != nil { 
      return "", err 
     } 
    } 
    return b.String(), nil 
} 

使用法:

certs, err := GetCertificatesPEM("example.com:443") 
関連する問題