【问题标题】:Request client certificate for authentication请求客户端证书进行身份验证
【发布时间】:2014-06-12 09:36:33
【问题描述】:

我想向浏览器申请一个证书以验证成员身份。

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

看过一些关于tls的文章,但是不太明白怎么用……

【问题讨论】:

    标签: ssl go


    【解决方案1】:

    以下是如何要求客户端证书的简短示例。诀窍是手动创建和配置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)。

    【讨论】:

    • 这正是我想要的。以及如何访问证书,自己查看字段?
    • @Druxtan 你可以使用 openssl 命令行工具来分析证书,如果这就是你的意思的话。您可以从 Go 中执行此操作,但如果客户端具有有效证书,则不需要这样做。
    • 你可以这样做,但会很麻烦,因为这是由标准包在内部处理的。
    猜你喜欢
    • 2015-02-26
    • 2011-04-13
    • 2012-01-10
    • 2011-05-20
    • 2015-10-29
    • 2018-07-05
    • 2019-01-14
    • 2011-04-09
    • 2013-10-07
    相关资源
    最近更新 更多