如何在 Go 中访问客户端的证书?

下面是我在 Go 中的 HTTPS 服务器代码。服务器要求客户端提供 SSL 证书,但不验证证书(按设计)。


如果您想尝试一下,可以按如下方式生成私钥/公钥对:


$ openssl genrsa -out private.pem 2048

$ openssl req -new -x509 -key private.pem -out public.pem -days 365

有谁知道我如何在处理程序中访问客户端证书?假设我想报告有关客户端提交给客户端的证书的一些属性。


谢谢,克里斯。


package main


import (

    "fmt"

    "crypto/tls"

    "net/http"

)


const (

    PORT       = ":8443"

    PRIV_KEY   = "./private.pem"

    PUBLIC_KEY = "./public.pem"

)


func rootHandler(w http.ResponseWriter, r *http.Request) {

    fmt.Fprint(w, "Nobody should read this.")

}


func main() {


    server := &http.Server{

        TLSConfig: &tls.Config{

            ClientAuth: tls.RequireAnyClientCert,

            MinVersion: tls.VersionTLS12,

        },

        Addr: "127.0.0.1:8443",

    }


    http.HandleFunc("/", rootHandler)

    err := server.ListenAndServeTLS(PUBLIC_KEY, PRIV_KEY)

    if err != nil {

        fmt.Printf("main(): %s\n", err)

    }

}


鸿蒙传说
浏览 245回答 1
1回答

慕村225694

似乎r *http.Request有TLS *tls.ConnectionState场,而PeerCertificates []*x509.Certificate场又是场,所以fmt.Fprint(w, r.TLS.PeerCertificates)大概可以做
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go