【问题标题】:golang: HTTPS request yields "crypto/rsa: verification error"golang:HTTPS 请求产生“crypto/rsa:验证错误”
【发布时间】: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

docsnet/http 明确声明,

Get、Head、Post 和 PostForm 发出 HTTP(或 HTTPS)请求

但我找不到有关此错误的任何文档。

crypto/rsasource 仅对错误进行了说明:

// 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.ConfigInsecureSkipVerify 设置为 trueClient,但这似乎并没有解决此错误。

【问题讨论】:

  • 许多 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 解决了这个问题。谢谢你拍我的头,我需要那个。多么明显的解决方案。

标签: https go rsa


【解决方案1】:

Go 使用 linuxwindows 下的系统根 SSL 证书。

鉴于测试在我的带有 go 1.2 的 ubuntu 12.04 机器上运行良好,要么

  1. 您使用的是非常旧的 go 版本
  2. 您的系统具有过期的根证书

如果您想更新您的根证书,here 是 Windows 的提示。谷歌搜索应该会找到更多关于其他操作系统的想法。

【讨论】:

  • 感谢您的领导。我已经尝试更新 OS X、我的根证书,甚至是 openssl,以防万一。我仍然收到错误消息。然而,我似乎能够以这种方式加载其他域,我什至能够在我的 Linode 机器上加载这个有问题的域(运行 CentOS)。但由于某种原因,我的 Mac 不喜欢 Bitfinex 的 SSL 证书。现在仍然不知道如何调试它。
【解决方案2】:

就我而言,这是因为我设置了错误的公钥来验证令牌。当我把它改成正确的时,它就像一个魅力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2017-07-16
    • 2013-08-15
    • 1970-01-01
    • 2012-04-22
    相关资源
    最近更新 更多