HTTP客户端错误:asn1:结构错误:基本128整数太大

时间:2018-06-03 08:23:55

标签: ssl go https

我在Go中有一个非常基本的应用程序,代码如下:

var client = &http.Client{
    Timeout: time.Duration(30 * time.Second),
}

// skipped payload ...

response, err := client.Post(apiUrlLogin, contentType, &payload)

err返回:

Post https://xxx/api/login: tls: failed to parse certificate from server: 
asn1: structure error: base 128 integer too large

Go版本为go version go1.10.2 darwin/amd64

证书是自行发行的(公司),我尝试使用Curl向API发出POST请求,并且工作正常。

在调用crypto/tls/handshake_client.go:317 x509.ParseCertificate(asn1Data)时,tls.Config.InsecureSkipVerify中的static bool checkIfPalindromic(string A) { for (int i = 0; i < A.Length / 2; i++) if (A[i] != A[A.Length - i - 1]) return false; return true; } 正常验证期间,在apiKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' secretKey = 'XXXXXXXXXXXXXXXXXX' import upwork 检查之前发生了失败本身。

此问题是否有可能的解决方法?我尝试使用TLS版本,密码套件等没有运气,现在有一种偷偷摸摸的怀疑,它可能是Go中的一个错误。

更新:正如@a​​in所说,这是一个已知问题,到目前为止我还没有找到任何解决方案。

1 个答案:

答案 0 :(得分:0)

是的,这是一个已知的错误/限制,请参阅此issue

OID的子标识符基本上可以是无限大小,但Go选择使用int来存储它们,即每个节点32位。您的证书中有一个OID,其中包含一个不能用31位表示的节点。由于这是自行颁发的证书,您可以使用其他OID而不是违规的OID。