首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通配符证书支持使用Autocert (golang)

通配符证书支持使用Autocert (golang)
EN

Stack Overflow用户
提问于 2022-04-04 18:10:16
回答 1查看 423关注 0票数 1

使用通配符证书支持实现https go服务器。

代码语言:javascript
复制
package main

import (
    "crypto/tls"
    "log"
    "net/http"
    "golang.org/x/crypto/acme/autocert"
)

func main() {
    certManager := autocert.Manager{
        Prompt:     autocert.AcceptTOS,
        HostPolicy: autocert.HostWhitelist("example.com"), //Your domain here
        Cache:      autocert.DirCache("certs"),            //Folder for storing certificates
    }

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello world"))
    })

    server := &http.Server{
        Addr: ":https",
        TLSConfig: &tls.Config{
            GetCertificate: certManager.GetCertificate,
        },
    }

    go http.ListenAndServe(":http", certManager.HTTPHandler(nil))

    log.Fatal(server.ListenAndServeTLS("", "")) //Key and cert are coming from Let's Encrypt
}

无法知道如何将通配符模式添加到主机白名单。

需要支持"*.example.com“

EN

回答 1

Stack Overflow用户

发布于 2022-05-11 14:41:38

HostWhitelist不支持通配符,但是由于HostPolicy只是一个函数,所以可以使用正则表达式实现自己的HostPolicy

代码语言:javascript
复制
var (
    allowedHosts      = regexp.MustCompile(`^[^.]+\.example\.com$`)
    errPolicyMismatch = errors.New("the host did not match the allowed hosts")
)

func CustomHostPolicy(_ context.Context, host string) error {
    if matches := allowedHosts.MatchString(host); !matches {
        return errPolicyMismatch
    }
    return nil
}

参见https://go.dev/play/p/8gGIpnl1NLs演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71741888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档