我已经安装并配置了Databricks CLI,但当我尝试使用它时,我收到一个错误,表明它找不到本地颁发者证书:
$ dbfs ls dbfs:/databricks/cluster_init/
Error: SSLError: HTTPSConnectionPool(host='dbc-12345678-1234.cloud.databricks.com', port=443): Max retries exceeded with url: /api/2.0/dbfs/list?path=dbfs%3A%2Fda
tabricks%2Fcluster_init%2F (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer
certificate (_ssl.c:1123)')))
上面的错误是否表明我需要安装证书,或者以某种方式配置我的环境,以便它知道如何找到正确的证书?
我的环境是带有WSL的Windows 10(Ubuntu 20.04((上面的命令来自WSL/Ubuntu命令行(。
Databricks CLI安装在Anaconda环境中,包括以下证书和SSL包:
$ conda list | grep cert
ca-certificates 2020.6.20 hecda079_0 conda-forge
certifi 2020.6.20 py38h32f6830_0 conda-forge
$ conda list | grep ssl
openssl 1.1.1g h516909a_1 conda-forge
pyopenssl 19.1.0 py_1 conda-forge
当我尝试使用带有curl
:的REST API时,我也遇到了类似的错误
$ curl -n -X GET https://dbc-12345678-1234.cloud.databricks.com/api/2.0/clusters/list
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
此问题可以通过禁用SSL证书验证来解决。在Databricks CLI中,您可以通过在Databricks配置文件.databrickscfg
中指定insecure = True
来执行此操作。
我通过设置环境变量REQUESTS_CA_BUNDLE
建立了对Databricks实例的信任。
➜ databricks workspace list
Error: SSLError: HTTPSConnectionPool(host='HOSTNAME.azuredatabricks.net', port=443): Max retries exceeded with url: /api/2.0/workspace/list?path=%2F (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)')))
➜ export REQUESTS_CA_BUNDLE=path/to/ca-bundle
➜ databricks workspace list
Users
Shared
Repos
来自GitHub问题:
下载用于签署Databricks证书的根CA证书。确定CA束的路径,并设置环境变量REQUESTS_CA_BUNDLE
。有关更多信息,请参阅SSL证书验证。
针对Azure CLI的GitHub中也存在类似问题。解决方案实际上是一样的。结合埃里克的回答:
-
使用浏览器下载证书并将其保存到磁盘
- 打开你的Chrome浏览器并访问Databricks网站
- 按CTRL+SHIFT+I打开开发工具
- 单击安全选项卡
- 单击"查看证书"按钮
- 单击详细信息选项卡
- 在"证书层次结构"(顶部面板(上,单击树中的最高节点
- 单击"导出所选证书">
- 选择要保存的位置(例如/home/cert/ccert.crt(
-
在Windows上使用
SET
命令,在Linux上使用export
创建一个名为REQUESTS_CA_BUNDLE
的env变量,并将其指向步骤1中下载的文件。(请记住,这需要在不在集群中尝试使用dbfs
的同一台机器中完成(例如:Linux
export REQUESTS_CA_BUNDLE=/home/cert/certificate.crt
Windows
set REQUESTS_CA_BUNDLE=c:tempcertcertificate.crt
-
尝试再次运行命令
dbfs ls dbfs:/databricks/cluster_init/
$ dbfs ls dbfs:/databricks/cluster_init/
应该可以!