如何从URL获取证书?

Aor*_*Aor 4 ssl ssl-certificate go

我正在尝试找到一个类似于Python的函数ssl.get_server_certificate(),它接受一个主机名 - 端口对并返回一个PEM编码的证书,但我没有运气.

我已经做了相当多的挖掘,但我发现的最接近的问题(在golang中获取远程ssl证书)没有帮助,也没有阅读包的文档crypto/tls.我是Go的新手,所以我可能还没有理解文档中的内容

Tim*_*per 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
}
Run Code Online (Sandbox Code Playgroud)

用法:

certs, err := GetCertificatesPEM("example.com:443")
Run Code Online (Sandbox Code Playgroud)