栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

有没有一种方法可以在没有停机的情况下更新net / http服务器中的TLS证书?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有没有一种方法可以在没有停机的情况下更新net / http服务器中的TLS证书?

有:您可以使用

tls.Config
GetCertificate
成员而不是填充
Certificates
。首先,定义一个封装证书和重载功能的数据结构(
SIGHUP
在此示例中,在接收到信号时):

type keypairReloader struct {        certMu   sync.RWMutex        cert     *tls.Certificate        certPath string        keyPath  string}func NewKeypairReloader(certPath, keyPath string) (*keypairReloader, error) {         result := &keypairReloader{     certPath: certPath,     keyPath:  keyPath,        }        cert, err := tls.LoadX509KeyPair(certPath, keyPath)        if err != nil {     return nil, err        }        result.cert = &cert        go func() {     c := make(chan os.Signal, 1)     signal.Notify(c, syscall.SIGHUP)     for range c {  log.Printf("Received SIGHUP, reloading TLS certificate and key from %q and %q", *tlsCertPath, *tlsKeyPath)  if err := result.maybeReload(); err != nil {          log.Printf("Keeping old TLS certificate because the new one could not be loaded: %v", err)  }     }        }()        return result, nil}func (kpr *keypairReloader) maybeReload() error {         newCert, err := tls.LoadX509KeyPair(kpr.certPath, kpr.keyPath)        if err != nil {     return err        }        kpr.certMu.Lock()        defer kpr.certMu.Unlock()        kpr.cert = &newCert        return nil}func (kpr *keypairReloader) GetCertificateFunc() func(*tls.ClientHelloInfo) (*tls.Certificate, error) {         return func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) {     kpr.certMu.RLock()     defer kpr.certMu.RUnlock()     return kpr.cert, nil        }}

然后,在您的服务器代码中,使用:

kpr, err := NewKeypairReloader(*tlsCertPath, *tlsKeyPath)if err != nil {    log.Fatal(err)}srv.TLSConfig.GetCertificate = kpr.GetCertificateFunc()

我最近在RobustIRC中实现了这种模式。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484385.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号