Tho*_*mas 5 ssl ssl-certificate google-bigquery gcloud google-cloud-sdk
更新(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)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
sudo gcloud components update (版本221.0.0)。sudo pacman -Syu(系统更新)以获取最新的SSL证书集。这是Arch Linux,几乎总是在不断发展。sudo gcloud components reinstall。google-cloud-sdk,清除剩余的内容/opt/google-cloud-sdk并重新安装。--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在此shell中设置环境变量。不出所料,这也没有什么不同。SSL错误发生之前bq,甚至没有机会开始OAuth握手。--disable_ssl_validation。这是“有效的”,但显然是不安全的。还有其他人看到这个,或者有想法如何调试/解决吗?
小智 1
我在使用 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.
我尝试过使用curlandopenssl s_client与此 CA 捆绑包来对抗被调用的 API URL,即
https://www.googleapis.com/discovery/v1/apis/bigquery/v2/rest
Run Code Online (Sandbox Code Playgroud)
而且效果很好。
我的假设是,这不是证书丢失或过期的问题。我的pyopenssl包是 version 18.0.0,所以我在这里使用的是最新版本。不过,我认为这个问题是由 TLS 握手过程中不支持的密码或算法引起的。
| 归档时间: |
|
| 查看次数: |
1439 次 |
| 最近记录: |