【发布时间】:2014-04-19 20:45:22
【问题描述】:
我在使用 net/http 包访问 https 网址时遇到问题。
这是一个错误的工作示例:
package main
import (
"fmt"
"net/http"
)
func main() {
_, err := http.Get("https://api.bitfinex.com/v1/book/ltcbtc")
if err != nil {
fmt.Println(err)
}
}
这个程序产生错误,
Get https://api.bitfinex.com/v1/book/ltcbtc: crypto/rsa: verification error
docs 为 net/http 明确声明,
Get、Head、Post 和 PostForm 发出 HTTP(或 HTTPS)请求
但我找不到有关此错误的任何文档。
crypto/rsa 的 source 仅对错误进行了说明:
// ErrVerification represents a failure to verify a signature.
// It is deliberately vague to avoid adaptive attacks.
var ErrVerification = errors.New("crypto/rsa: verification error")
所以我不确定从这里去哪里。我很确定这不是他们的错,因为 Chrome 对他们的 https 证书很满意。
我还尝试使用 tls.Config 将 InsecureSkipVerify 设置为 true 的 Client,但这似乎并没有解决此错误。
【问题讨论】:
-
许多 unix 发行版没有最新的 PKI 链签名密钥列表。特别是 Thawte 证书需要一个额外的证书链来验证他们的证书。浏览器通常是最新的。
-
这里有更多关于解冻问题的信息。 community.thawte.com/forums/…
-
@ArturSapek:Chrome 可能使用自己的一组证书,独立于操作系统。您是否尝试过使用
openssl s_client -connect api.bitfinex.com:443? -
我使用 ubuntu 12.04 尝试了上述操作并转到 1.2,它运行良好。建议您发布
go version的操作系统详细信息和输出。 -
升级去修复它!我真的需要学会在向任何人寻求帮助之前总是尝试这样做。出于文档目的,我运行的 go 版本是
go version devel +f4d1cb8d9a91 Thu Sep 19 22:34:33 2013 +1000 darwin/amd64。升级到最新版本go version go1.2.1 darwin/amd64解决了这个问题。谢谢你拍我的头,我需要那个。多么明显的解决方案。