使用 Go 和 Let's Encrypt 快速配置HTTPS加密">使用 Go 和 Let's Encrypt 快速配置HTTPS加密

Let's Encrypt 在2015年秋季推出了免费的数字证书认证计划,旨在消除当前手动创建和安装证书的复杂性,并推广加密的万维网服务,为安全网站提供 免费 的SSL/TLS证书。

Let's Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务。主要赞助商包括电子前哨基金会,Mozilla基金会,Akamai以及思科。2015年4月9日,ISRG与linux基金会宣布合作。

用以实现这一新的数字证书认证机构的协议被称为自动证书管理环境( ACME )。提案的一个版本已作为一个Internet草案发布。

目前, 申请证书的域名只能是特定的域名, 不支持 通配符证书 (*.example.com),这对于一个拥有众多子域名的公司来说很不方便。但是今年已经说了,将于2018年1月 支持通配符证书 和ACME v2 API。

原先有一些支持Let's Encrypt的 Go 工具和库, 比如 lego 、 acme 、 letsencrypt 、 rsc/letsencrypt , 但是我推荐使用官方的库: x/crypto/acme/autocert , 简单好用,并且官方维护。

稍微复杂一点的使用姿势如下(其实已经很简单了):

m := autocert.Manager{
    Cache:      autocert.DirCache("secret-dir"),
    Prompt:     autocert.AcceptTOS,
    HostPolicy: autocert.HostWhitelist("example.org"),
}
s := &http.Server{
    Addr:      ":https",
    TLSConfig: &tls.Config{GetCertificate: m.GetCertificate},
}
s.ListenAndServeTLS("", "")

autocert.Manager 提供了 GetCertificate 方法, 可以用来配置 TLSConfig

更简单的方式是一行搞定:

mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, TLS user! Your config: %+v", r.TLS)
})
log.Fatal(http.Serve(autocert.NewListener("example.com"), mux))

autocert.NewListener 提供了一个自动配置的listener,使用起来非常的方便。

所以,如果你想做一些额外的配置,如果证书要缓存的位置,就用上面的方式, 如果想傻瓜式的使用,就用一行代码的方式。

关于这个包的设计的一些讨论可以看: #17053 。

赞 (0) 评论 分享 ()