go x/crypto/acme/autocert:考虑将证书存储为"*.pem"在DirCache中

ckx4rj1h  于 4个月前  发布在  Go
关注(0)|答案(3)|浏览(37)

我最近实施了autocert来生成证书;它对我来说效果很好👍
我确实遇到了一个问题:DirCache 的实现将生成的证书仅存储为域名,例如 test.example.com ,而不是 test.example.com.pem
我还使用生成的证书与外部TLS代理(hitch)一起使用,像这样加载证书是不可能的,因为它会在非证书文件上出错,如 acme_account+key ,这在我看来是hitch合理的行为。
如果它们被存储为 *.pem ,我可以告诉hitch只加载这些文件,这是有效的。
我通过以下方式解决这个问题,但我认为改变 DirCache 的行为总是这样做可能是合理的?

// cache is like autocert.DirCache, but ensures that certificates end with .pem.
type cache struct{ dc autocert.DirCache }

func NewCache(dir string) cache { return cache{dc: autocert.DirCache(dir)} }

func (d cache) Get(ctx context.Context, key string) ([]byte, error) {
    if !strings.Contains(key, "+") {
        key += ".pem"
    }
    return d.dc.Get(ctx, key)
}

func (d cache) Delete(ctx context.Context, key string) error {
    if !strings.Contains(key, "+") {
        key += ".pem"
    }
    return d.dc.Delete(ctx, key)
}

func (d cache) Put(ctx context.Context, key string, data []byte) error {
    if !strings.Contains(key, "+") {
        key += ".pem"
    }
    return d.dc.Put(ctx, key, data)
}
eyh26e7m

eyh26e7m1#

/cc @bradfitz@x1ddos

zte4gxcn

zte4gxcn2#

Given the existence of an easy workaround, I'd prefer to not change the behaviour of file name = host name.

mitkmikd

mitkmikd3#

我不能完全称之为“简单”。我是说,代码本身足够容易理解,但我花了一段时间阅读代码来弄清楚检查+是否可靠地过滤非证书文件,这是DirCache内部的一个细节,可能会在未来发生变化。

相关问题