Ошибка клиента HTTP: asn1: структурная ошибка: слишком большое целое число 128 - PullRequest
0 голосов
/ 03 июня 2018

У меня есть очень простое приложение на 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

Сертификат выдан самостоятельно (корпоративный), я пытался отправлять запросы POST к API с помощью Curl, и он работал нормально.

Сам сбой происходит в Go во время обычной проверки в crypto/tls/handshake_client.go:317 при вызове x509.ParseCertificate(asn1Data), что происходит до tls.Config.InsecureSkipVerify проверки.

Есть ли возможный обходной путь для этой проблемы?Я безуспешно пытался играть с версией TLS, комплектами шифров и т. Д., И теперь у меня есть подозрение, что это может быть ошибкой в ​​Go.


ОБНОВЛЕНИЕ: как упомянул @ain, это известная проблема, и япока не нашел решения.

1 Ответ

0 голосов
/ 04 июня 2018

Да, это известная ошибка / ограничение, см. Эту проблему .

В основном подидентификаторы OID могут иметь неограниченный размер, но Go решил использовать int для их хранения, т.е.32 бита на узел.Ваш сертификат имеет OID, который содержит узел, который не может быть представлен 31 битом.Поскольку это сертификат, выданный вами самостоятельно, вы можете использовать другой OID вместо оскорбительного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...