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

3
以下是我在 Go 语言中编写的HTTPS服务器代码。该服务器要求客户端提供 SSL 证书,但不验证证书(出于设计考虑)。
如果您想尝试,请按以下方式生成私钥/公钥对:
$ openssl genrsa -out private.pem 2048
$ openssl req -new -x509 -key private.pem -out public.pem -days 365

有人知道我如何在处理程序中访问客户端证书吗?比方说,我想向客户端报告一些关于所呈现证书的属性。

谢谢, Chris。

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)
    }
}
1个回答

5

似乎r *http.Request有一个TLS *tls.ConnectionState字段,该字段又有一个PeerCertificates []*x509.Certificate字段,因此

fmt.Fprint(w, r.TLS.PeerCertificates)

也许可以做到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接