ssl - 如何从 URL 获取证书?

标签 ssl go ssl-certificate

我试图找到一个类似于 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/

相关文章:

python - Django 和 SSL 问题

for-loop - GO - 递归函数中的 switch 语句

pointers - Go中的指针困惑

mongodb - 如何检查集合是否存在 MongoDB Golang

SSL证书: How to display country and state information?

ssl - Cloud Foundry 上的 HTTPS Node 应用程序

apache - 重定向 https ://www to https://non-www - without seeing certificate error, 可能吗?

linux - "curl"无法连接到 ftp : "500 ?"

java - selenium headless chrome java忽略ssl错误

c++ - 使用 C++ 在 Windows 上获取 ssl 证书