更新(2019-02-07):issue已修复,因此,如果仍然遇到此问题,请尝试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
here)。这不会产生任何额外的输出。--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
环境变量。不出所料,这也没有什么不同。 bq
甚至没有机会开始OAuth握手之前就发生SSL错误。--disable_ssl_validation
。这“有效”,但显然不安全。还有其他人看到这个,或者有想法如何调试/解决吗?
答案 0 :(得分:1)
在使用Arch Linux时,我也看到了完全相同的问题。
但是,当您在命令行上发出bq
命令时,我非常确定{strong>不使用/opt/google-cloud-sdk/platform/bq/third_party/httplib2/cacerts.txt
处的证书文件,因为标志{{ 1}}将在应用程序引导过程中自动放入标志中。在Arch Linux上,此文件是指向--ca_certificates_file=/etc/ssl/certs/ca-certificates.crt
的符号链接。
我尝试将/etc/ca-certificates/extracted/tls-ca-bundle.pem
和curl
与该CA捆绑包一起用于被调用的API URL,即
openssl s_client
它工作正常。
我的假设是,这不是证书丢失或过期的问题。我的https://www.googleapis.com/discovery/v1/apis/bigquery/v2/rest
软件包的版本为pyopenssl
,所以这里是最新版本。但是,我认为此问题是由TLS握手过程中不受支持的密码或算法引起的。
答案 1 :(得分:0)
有一个public issue tracker,您的行为与此类似。我建议starring it保持更新并提供您的情况。
如果您在公司代理后面,则在评论#8上有一种情况是公司代理替换证书,并且在评论#16上提供了解决方法
希望有帮助。