我最近实施了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)
}
3条答案
按热度按时间eyh26e7m1#
/cc @bradfitz@x1ddos
zte4gxcn2#
Given the existence of an easy workaround, I'd prefer to not change the behaviour of file name = host name.
mitkmikd3#
我不能完全称之为“简单”。我是说,代码本身足够容易理解,但我花了一段时间阅读代码来弄清楚检查
+
是否可靠地过滤非证书文件,这是DirCache
内部的一个细节,可能会在未来发生变化。