3 回答

TA貢獻(xiàn)1898條經(jīng)驗 獲得超8個贊
必須調(diào)用crypto/tls/Conn.Handshake。然后你可以讀取對等證書:tlsconn.ConnectionState().PeerCertificates[0].Subject.CommonName

TA貢獻(xiàn)1804條經(jīng)驗 獲得超8個贊
使用 crypto/tls 時,您可以查詢 ConnectionState 的任何 Conn 對象:
func (c *Conn) ConnectionState() ConnectionState
ConnectionState 結(jié)構(gòu)包含有關(guān)客戶端證書的信息:
type ConnectionState struct {
PeerCertificates []*x509.Certificate // certificate chain presented by remote peer
}
該x509.Certificate應(yīng)該相當(dāng)簡單的與工作。
在服務(wù)器請求客戶端身份驗證之前,您必須使用服務(wù)器證書、客戶端 CA(否則您必須手動驗證信任鏈,您真的不想要)和 tls.RequireAndVerifyClientCert 配置連接。例如:
// Load my SSL key and certificate
cert, err := tls.LoadX509KeyPair(settings.MyCertificateFile, settings.MyKeyFile)
checkError(err, "LoadX509KeyPair")
// Load the CA certificate for client certificate validation
capool := x509.NewCertPool()
cacert, err := ioutil.ReadFile(settings.CAKeyFile)
checkError(err, "loadCACert")
capool.AppendCertsFromPEM(cacert)
// Prepare server configuration
config := tls.Config{Certificates: []tls.Certificate{cert}, ClientCAs: capool, ClientAuth: tls.RequireAndVerifyClientCert}
config.NextProtos = []string{"http/1.1"}
config.Rand = rand.Reader
- 3 回答
- 0 關(guān)注
- 473 瀏覽
添加回答
舉報