V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
dzdh
V2EX  ›  Go 编程语言

tls.GetCertificate 方法中怎么设置上下文自定义变量或分享某些值

  •  
  •   dzdh · 2022-07-14 11:24:39 +08:00 · 1186 次点击
    这是一个创建于 847 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http.HandleFunc("/", func (...) {
        // 2. 此处读取自定义的变量、值
    } )
    tlsCfg := tls.Config{
            GetCertificate: func(info *tls.ClientHelloInfo) (*tls.Certificate, error) {
                // 超级多域名
                crt := getCertificateByApi(info.ServerName)
                if crt == nil { return nil, errors.New(".....") }
    
                // 这里怎么设置一个上下文的自定义变量呢
                // 比如 getCertificateByApi 方法同时返回了其他关于这个域名在系统内的信息,比如系统到期时间等,然后  info.Context().Set("expire", "....")
                
                // 但是 info.Context 只能读取又不能动态替换 Context..
    
    
                return crt
            },
    }
    srv := http.Server{TLSConfig : &tlsCfg}
    srv.ListenAndServeTLS("","")
    

    原因是,就趁着这一次接口请求,把该拿的数据都拿了。不想在 handle 里再请求一次接口。。

    6 条回复    2022-07-14 20:13:52 +08:00
    seth19960929
        1
    seth19960929  
       2022-07-14 13:28:34 +08:00
    弄个全局变量上锁就可以了, 这有什么问题?
    dzdh
        2
    dzdh  
    OP
       2022-07-14 13:42:11 +08:00
    @seth19960929 是想让他跟着当前请求走,因为有些配置属性每次请求可能不一样
    seth19960929
        3
    seth19960929  
       2022-07-14 16:57:02 +08:00
    map 一个域名就可以了
    dzdh
        4
    dzdh  
    OP
       2022-07-14 17:10:35 +08:00
    @seth19960929 另外一个系统在维护。随时会有变化。

    。。看来只能重新实现一遍握手了...
    blless
        5
    blless  
       2022-07-14 19:45:32 +08:00
    server 端的证书跟着客户端请求走。。这种用法也太怪了吧?

    TLS 握手交换验证证书在你 HandleFunc("/")之前就完成了,TLS 证书配置则必须在 http server 启动前就配置好。。你们需求是不是搞错了因果关系。。
    jinliming2
        6
    jinliming2  
       2022-07-14 20:13:52 +08:00 via iPhone   ❤️ 1
    @blless 并不奇怪啊,根据客户端请求的 SNI 下发不同的证书,或者根据客户端的版本兼容性下发 RSA/ECC 证书,这是个很常见的需求吧?
    TLS 证书可以不在 http server 启动前配置,甚至可以等用户来请求了再去用 ACME 协议申请证书,然后缓存。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3003 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:33 · PVG 21:33 · LAX 05:33 · JFK 08:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.