我试图找到一个类似于 Python 的 ssl.get_server_certificate()
的函数,它接受一个主机名-端口对并返回一个 PEM 编码的证书,但我没有找到任何运气.
我已经进行了相当多的挖掘,但我发现的最接近的问题 ( Get remote ssl certificate in golang ) 没有帮助,阅读包 crypto/tls
的文档也没有帮助.我是 Go 的新手,所以我可能没有理解文档中的某些内容
最佳答案
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")
关于ssl - 如何从 URL 获取证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46735347/