我想通过TLS接收TCP连接.我想验证客户端证书并使用它来验证我的应用程序的客户端.Go有标准crypto/tls包.它可以验证客户端/服务器证书.但是我找不到获取远程(客户端)证书详细信息的方法,比如通用名称.
Rek*_*kby 11
不得不打电话给crypto/tls/Conn.Handshake.然后你可以读取对等证书:tlsconn.ConnectionState().PeerCertificates [0] .Subject.CommonName
以下代码可能会帮助您获得答案
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)