我试图找到类似于Python ssl.get_server_certificate()
的功能,它采用主机名 - 端口对并返回PEM编码的证书,但我还没有任何功能运气。
我已经做了相当多的挖掘,但我发现的最接近的问题(Get remote ssl certificate in golang)没有帮助,也没有阅读包crypto/tls
的文档}。我是Go的新手,所以我可能还没有理解文档中的内容
答案 0 :(得分:6)
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")
答案 1 :(得分:-1)
这仅仅是将main()
添加到Tim的示例中,以便人们可以复制和粘贴:
package main
import (
"bytes"
"crypto/tls"
"encoding/pem"
"fmt"
)
func GetCertificatesPEM(address string) (string, error) {
.... the original function goes here
}
func main() {
certs, err := GetCertificatesPEM("bitbucket.org:443")
if err == nil {
fmt.Printf("len %v : %v\n", len(certs), certs)
} else {
fmt.Print("err %v\n", err.Error())
}
}