请求客户端证书进行身份验

时间:2014-06-12 09:36:33

标签: ssl go

我想向浏览器申请认证成员的证书。

在nodejs中,我们有http://nategood.com/nodejs-ssl-client-cert-auth-api-rest

之类的东西

我已经阅读了一些关于tls的文章,但我真的不明白如何使用它...

1 个答案:

答案 0 :(得分:12)

以下是如何要求客户端证书的简短示例。诀窍是手动创建和配置http.Server而不是使用实用例程。

package main

import (
    "crypto/tls"
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello cert")
    })

    server := &http.Server{
        Addr: ":8090",
        TLSConfig: &tls.Config{
            ClientAuth: tls.RequireAndVerifyClientCert,
        },
    }

    server.ListenAndServeTLS("cert.pem", "cert.key")
}

重要的部分是tls.Config结构,它控制服务器使用TLS的行为方式。字段ClientAuth包含客户端证书策略,在我们的示例中需要客户端证书并验证。请注意,其他政策可用......

您还应该查看同一结构的ClientCAs字段,该字段允许您使用客户端必须验证的根CA列表。

注意:我假设您还使用证书服务器端来加密通信。 server.ListenAndServeTLS方法作为副作用仍然为您做了很多工作。如果您不需要它,则必须深入研究method以手动执行此操作(并使用偶数较低级别的方法server.Serve)。