Golang:HTTPS请求出现“crypto/rsa: verification error”错误

8

我在使用 net/http 包访问 https url 时遇到了问题。

下面是一个出错的工作示例:

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
net/http 的文档清楚地说明了 Get、Head、Post 和 PostForm 方法可以进行 HTTP(或 HTTPS)请求,但我找不到任何有关此错误的文档。crypto/rsa 的源代码只是这样描述该错误:
// 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证书很满意。

我还尝试使用一个带有InsecureSkipVerify设置为truetls.ConfigClient,但似乎这并没有消除这个错误。


1
许多Unix发行版没有最新的PKI链签名密钥列表。特别是Thawte证书需要一个额外的证书链来验证它们的证书。浏览器通常更新得更及时。 - Fred the Magic Wonder Dog
以下是有关 thawte 问题的更多信息。https://community.thawte.com/forums/downloading-intermediate-ca-bundle-ssl123 - Fred the Magic Wonder Dog
@ArturSapek:Chrome可能使用自己的证书集,与操作系统无关。您尝试过使用openssl s_client -connect api.bitfinex.com:443吗? - nemo
2
我尝试了上述方法,使用的是Ubuntu 12.04和Go 1.2版本,效果很好。建议您发布操作系统的详细信息以及go version的输出结果。 - Nick Craig-Wood
升级Go就解决了!我真的需要学会在向任何人寻求帮助之前尝试这个。为了文档记录,我运行的Go版本是go version devel +f4d1cb8d9a91 Thu Sep 19 22:34:33 2013 +1000 darwin/amd64。升级到最新版本go version go1.2.1 darwin/amd64,解决了这个问题。谢谢你给我一巴掌,我需要这个。多么显而易见的解决方案。 - Artur Sapek
2个回答

1

LinuxWindows下,Go使用系统根SSL证书。

鉴于测试在我的Ubuntu 12.04上使用Go 1.2运行良好,可能是以下原因之一:

  1. 您正在使用非常旧的Go版本
  2. 您的系统根证书已过期

如果您想更新根证书,这里提供了一个Windows提示。通过Google可以找到其他操作系统的更多想法。


谢谢您的建议。我已经尝试更新OS X、根证书,甚至是openssl,以防万一有影响。但我仍然遇到了错误。不过,我似乎可以通过这种方式加载其他域名,甚至可以在我的Linode盒子(运行CentOS)上加载这个有问题的域名。但出于某种原因,我的Mac就是不喜欢Bitfinex的SSL证书。目前还不知道如何调试它。 - Artur Sapek

0
在我的情况下,这是因为我设置了错误的公钥来验证令牌。当我将其更改为正确的公钥时,它就像魔法般地工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接