如何在 Go 中访问客户端的证书?
How to access the client's certificate in Go?
下面是我在 Go 中的 HTTPS 服务器代码。服务器要求客户端提供 SSL 证书,但不验证证书(设计)。
如果您想尝试一下,可以按如下方式生成 private/public 密钥对:
$ 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)
}
}
似乎 r *http.Request
有 TLS *tls.ConnectionState
字段而后者又有 PeerCertificates []*x509.Certificate
字段,所以
fmt.Fprint(w, r.TLS.PeerCertificates)
应该可以
下面是我在 Go 中的 HTTPS 服务器代码。服务器要求客户端提供 SSL 证书,但不验证证书(设计)。
如果您想尝试一下,可以按如下方式生成 private/public 密钥对:
$ 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)
}
}
似乎 r *http.Request
有 TLS *tls.ConnectionState
字段而后者又有 PeerCertificates []*x509.Certificate
字段,所以
fmt.Fprint(w, r.TLS.PeerCertificates)
应该可以