在golang中获取远程ssl证书

Rek*_*kby 14 ssl go

我想通过TLS接收TCP连接.我想验证客户端证书并使用它来验证我的应用程序的客户端.Go有标准crypto/tls包.它可以验证客户端/服务器证书.但是我找不到获取远程(客户端)证书详细信息的方法,比如通用名称.

Rek*_*kby 11

不得不打电话给crypto/tls/Conn.Handshake.然后你可以读取对等证书:tlsconn.ConnectionState().PeerCertificates [0] .Subject.CommonName


Pri*_*mar 5

以下代码可能会帮助您获得答案

package main

import (
    "crypto/tls"
    "fmt"
    "log"
)

func main() {
    conf := &tls.Config{
        InsecureSkipVerify: true,
    }

    conn, err := tls.Dial("tcp", "www.google.com:443", conf)
    if err != nil {
        log.Println("Error in Dial", err)
        return
    }
    defer conn.Close()
    certs := conn.ConnectionState().PeerCertificates
    for _, cert := range certs {
        fmt.Printf("Issuer Name: %s\n", cert.Issuer)
        fmt.Printf("Expiry: %s \n", cert.NotAfter.Format("2006-January-02"))
        fmt.Printf("Common Name: %s \n", cert.Issuer.CommonName)

    }
}
Run Code Online (Sandbox Code Playgroud)