首页 > 解决方案 > “bq”命令行工具抛出 CERTIFICATE_VERIFY_FAILED

问题描述

更新(2019 年 2 月 7 日):该问题现已修复,因此如果您仍然遇到此问题,请尝试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)

我尝试了以下方法:

其他人看到这个,或者有如何调试/解决的想法?

标签: sslgoogle-bigqueryssl-certificategcloudgoogle-cloud-sdk

解决方案


我在使用 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.

我已经尝试使用这个 CA 包curlopenssl s_client对抗被调用的 API URL,即

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

它工作得很好。

我的假设是,这不是证书丢失或过期的问题。我的pyopenssl包是 version 18.0.0,所以我在这里是最新版本。但是,我认为这个问题是由 TLS 握手过程中不支持的密码或算法引起的。


推荐阅读