Инструмент командной строки "bq" выдает CERTIFICATE_VERIFY_FAILED - PullRequest
0 голосов
/ 17 октября 2018

Обновление (2019-02-07): проблема теперь исправлена, поэтому, если вы все еще сталкиваетесь с этим, попробуйте gcloud components update.


В какой-то момент за последние несколько месяцев мой инструмент bq перестал работать.Даже простая вещь показывает эту ошибку:

$ bq show
BigQuery error in show operation: Cannot contact server. Please try again.
Traceback: Traceback (most recent call last):
File "/opt/google-cloud-sdk/platform/bq/bigquery_client.py", line 685, in BuildApiClient
response_metadata, discovery_document = http.request(discovery_url)
File "/opt/google-cloud-sdk/platform/bq/third_party/oauth2client_4_0/transport.py", line 176, in new_request
redirections, connection_type)
File "/opt/google-cloud-sdk/platform/bq/third_party/oauth2client_4_0/transport.py", line 283, in request
connection_type=connection_type)
File "/opt/google-cloud-sdk/platform/bq/third_party/httplib2/__init__.py", line 1626, in request
(response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
File "/opt/google-cloud-sdk/platform/bq/third_party/httplib2/__init__.py", line 1368, in _request
(response, content) = self._conn_request(conn, request_uri, method, body, headers)
File "/opt/google-cloud-sdk/platform/bq/third_party/httplib2/__init__.py", line 1288, in _conn_request
conn.connect()
File "/opt/google-cloud-sdk/platform/bq/third_party/httplib2/__init__.py", line 1082, in connect
raise SSLHandshakeError(e)
SSLHandshakeError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:726)

Я пробовал следующее:

  • sudo gcloud components update (версия 221.0.0).
  • sudo pacman -Syu (обновление системы), чтобы получить последний набор сертификатов SSL.Это Arch Linux, так что почти всегда он на переднем крае.
  • sudo gcloud components reinstall.
  • Удаление google-cloud-sdk, удаление оставшихся /opt/google-cloud-sdk и полная переустановка с AUR .
  • Добавление --httplib2_debuglevel=3 (действительные значения не задокументированы, найдено значение 3 здесь ).Это не дает никакого дополнительного вывода.
  • Добавление одного из --ca_certificates_file=/etc/ca-certificates/extracted/tls-ca-bundle.pem, --ca_certificates_file=/etc/ca-certificates/extracted/ca-bundle.trust.crt и --ca_certificates_file=/etc/ssl/certs/ca-certificates.crt, один из которых обязательно должен быть комплектом корневых сертификатов в моей системе.Последний из них используется curl, который может нормально общаться с www.googleapis.com.
  • Ткнув в исходный код, вы обнаруживаете, что /opt/google-cloud-sdk/platform/bq/third_party/httplib2/cacerts.txt - это набор сертификатов, используемый по умолчанию.Если я попробую этот вариант с curl --cacert ..., он все равно будет работать.
  • Установка переменной среды GOOGLE_APPLICATION_CREDENTIALS в этой оболочке.Как и ожидалось, это также не имеет значения;ошибка SSL возникает до того, как bq даже успел начать рукопожатие OAuth.
  • Добавление --disable_ssl_validation.Это «работает», но, очевидно, не безопасно.

Кто-нибудь еще видел это, или есть идеи, как отладить / решить?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Есть открытый трекер с похожим поведением, которое у вас есть.Я предлагаю в главной роли , чтобы быть в курсе событий и предоставления своего сценария.

Если вы находитесь за корпоративным прокси, в комментарии # 8 есть сценарий, которыйкорпоративный прокси-сервер заменяет сертификат, и обходной путь предоставляется для комментария # 16

Надеюсь, это поможет.

0 голосов
/ 18 октября 2018

Я вижу ту же проблему и в Arch Linux.

Однако, когда вы вводите команду bq в командной строке, я почти уверен, что файл сертификата на /opt/google-cloud-sdk/platform/bq/third_party/httplib2/cacerts.txt не используется, потому что флаг --ca_certificates_file=/etc/ssl/certs/ca-certificates.crt будет автоматически вставлен в флаги в процессе начальной загрузки приложения.В Arch Linux этот файл является символической ссылкой на /etc/ca-certificates/extracted/tls-ca-bundle.pem.

Я пытался использовать curl и openssl s_client с этим комплектом CA для вызываемого URL-адреса API, который является

https://www.googleapis.com/discovery/v1/apis/bigquery/v2/rest

и все работает отлично.

Я предполагаю, что это не проблема с отсутствующими или просроченными сертификатами.Мой пакет pyopenssl имеет версию 18.0.0, поэтому я нахожусь здесь в последней версии.Однако, я думаю, что эта проблема вызвана неподдерживаемыми шифрами или алгоритмами в процессе квитирования TLS.

...