问题标签 [autocert]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - 在 Go 中使用 Autocert 并附加自签名证书以在本地提供 https
我的目标是在本地和生产中提供一个简单的 https 端点。我找到了我相信我可以在生产中使用的autocert包,让我们加密。我发现gssc可以使用自签名证书在本地启动 https 服务器。最后,How to trust extra CA certs in your Go App看起来很有用。我从所有这些来源中汲取了想法并尝试将它们一起使用,尽管我不确定是否需要所有这些。
我的理解是,我可以使用AppendCertsFromPEM
将自签名证书附加到另一个证书,这将使客户端在尝试本地加载时不再抱怨。同样显然使用 autocert 我什至不需要自己在本地机器上生成证书文件。
当我访问时,https://localhost:443
我仍然收到以下错误:
2020/02/18 14:38:42 http:来自 [::1]:51832 的 TLS 握手错误:EOF
为了附加一个自签名证书,我从这里下载了一个公开可用的证书,然后将我的附加到这个证书上。这是正确的方法还是我需要其他地方的另一种方法(我在本地系统上找不到)。
这是我的代码:
我读到我不需要提供任何东西,server.ListenAndServeTLS
因为我们正在使用自动证书,但后来我遇到了一个错误,因为它无法打开文件。
基本上,如果没有 DNS 更改等,我实际上是否能够使用附加证书从 localhost 提供某些内容,而不会在我的本地浏览器中出现“此连接不是私有”警告,如果是,我需要在代码中进行哪些更改才能实现这一点可能的?
go - 如果代理正在转发,Golang 中的 AutoCert 可以使用自定义端口吗?
在 Golang 中,使用 autocert,我不断看到这样的例子:
但是,我有一个包含许多站点(go 应用程序)的服务器,并且我使用 NGINX 来代理流量。我可以做这样的事情吗?
如果没有,还有其他解决方案吗?
如果是这样,我不确定我做错了什么。我确实看到 certManager.GetCertificate 方法的返回之一是错误。
所以这个问题的第二部分是,我怎样才能捕捉到 certManager.GetCertificate 的错误?我的应用程序可以正常加载和编译。没有错误被抛出。
go - 如何解决x509:进行http请求时证书已过期或尚未生效
我有一个从中获取证书的网络服务器golang.org/x/crypto/acme/autocert
我在虚拟机上运行它。
相关代码:
这是我用于 HTTP 请求的内容:resp, err := http.DefaultClient.Get(url)
当我尝试从特定 API 获取时,我收到此错误:x509: certificate has expired or is not yet valid current time 2020-12-28T17:29:37Z is after 2020-12-26T08:22:28Z
但它只发生在那个特定的 API 上。我已经尝试了其他几个,它们都有效。
该代码一直有效,直到 12 月 26 日证书过期。
另一方面,我写了一个main.go
测试,没有我必须在我的网络服务器上使用的所有证书来测试。当我在本地机器上运行代码时,我从 API 中得到响应,没有任何问题。
这是main.go
文件: https: //play.golang.org/p/-EB9DIjJYQO
我该如何解决这个问题?
go - 我无法让 `golang.org/x/crypto/acme/autocert` 工作(对于 gRPC),我得到一个 `acme_account+key` 文件并且没有 X509 证书
更新经过多次调试,我发现
Get "https://acme-v02.api.letsencrypt.org/directory": x509: certificate signed by unknown authority
并怀疑(!?)这是由于 Let's Encrypt 的根证书最近到期造成的。
我接受“这个包是一个正在进行中的工作,并且没有 API 稳定性承诺。” 但是,如果它不再起作用(而且我的代码|部署很可能存在问题),那么也许可以标记 repo,例如Here be dragons。
该代码产生一个acme_account+key
( EC PRIVATE KEY
) 但没有证书我被挑战去autocert
披露(记录)它的魔力,以便了解我哪里出错了。
该代码本质上是 repo 的Manager
示例,其中包含来自此answer的输入。我假设ACME 流程完成时会GetCertificate
阻塞。
代码:
我正在部署到(Google Compute Engine)容器虚拟机,等效的 docker 命令是:
和容器日志:
主机的/tmp/certs
目录接收acme_account+key
(我一直在努力寻找由 Google 解释的)但怀疑(!?)是Domain Validation的初始阶段。它包含一个私钥 ( BEGIN EC PRIVATE KEY
)。
即使在服务器运行一段时间后,也不会保留更多文件。
我在配置的电子邮件地址没有收到来自 Let's Encrypt 的电子邮件。
不幸的是,虽然易于使用,但autocert
产生的日志记录很少,我无法确定是否可以记录(希望)正在发生的 ACME 流。
由于不再创建为GetCertificate
,添加匿名函数(我删除了以前的文件以检查它是否已重新创建),因此我无法从中收集任何日志记录,但从未调用该函数。这可能是因为我的匿名函数不正确,或者因为我已经超出了对 ACME 端点的请求。删除该功能并恢复为不会导致重新创建,所以我很茫然。acme_account+key
m.GetCertificate
acme_account+key
该autocert
Manager
类型记录了一个*acme.Client
我没有设置的字段。该评论描述了“如果 Client.Key 为零,则会生成一个新的 ECDSA P-256 密钥”,这可能是我正在经历的,但它并没有解释我应该怎么做。我应该将此值设置为的内容acme_account+key
吗?:
更新我尝试解码私钥,创建
crypto.Signer
并传递它,&acme.Client{Key: key}
但它没有明显的区别
显然,我使用不正确。我没有从 Let's Encrypt 收到证书,因此无法从端点获取证书,也无法调用 gRPC 端点:
指导将不胜感激。