我在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中的一个错误。
更新:正如@ain所说,这是一个已知问题,到目前为止我还没有找到任何解决方案。
答案 0 :(得分:0)
是的,这是一个已知的错误/限制,请参阅此issue。
OID的子标识符基本上可以是无限大小,但Go选择使用int来存储它们,即每个节点32位。您的证书中有一个OID,其中包含一个不能用31位表示的节点。由于这是自行颁发的证书,您可以使用其他OID而不是违规的OID。