我试图按照说明安装 Hyperledger Fabric 及其示例代码和示例在他们的页面上。但是,当我尝试执行以下命令时:
curl -sSL https://bit.ly/2ysbOFE | bash -s
我收到以下错误:
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.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.
经过一些小的调试后,我发现问题是它试图找到名称909be051.0
为/etc/ssl/certs/
.快速搜索后,我发现文件名是基于 openssl 命名约定的特定哈希值。我试图理解所发现的建议这里,但我没有rootcert.pem
提到这个。
然后我尝试卸载并重新安装curl。那没有用。我尝试通过运行来更新证书update-ca-certificates
,还尝试通过调用来重新哈希c_rehash
。那些没有用。
然后我发现了这个回答。我查了这个命令(例如这里)并阅读相关内容这里,并用它来尝试获取 bit.ly 的 SSL 证书,如下所示:
openssl s_client -showcerts -servername bit.ly -connect bit.ly:443 > cacert.pem
然后我将证书复制到证书目录/etc/ssl/certs
,执行update-ca-certificates
and c_rehash
,并重试curl命令,但它再次不起作用。我必须说我调用c_rehash
时没有指定任何目录,并且我的SSL_CERT_DIR
环境变量为空,所以也许我没有正确执行该过程。无论如何,我然后直接在curl
命令中使用了这个证书,如下所示:
curl -vsSL https://bit.ly/2ysbOFE --cacert ./cacert.pem | bash -s
并得到了
...
* Connection #0 to host bit.ly left intact
* Issue another request to this URL:
'https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh'
* Trying 185.199.109.133:443...
* Connected to raw.githubusercontent.com (185.199.109.133) port 443 (#1)
* ALPN, offering http/1.1
* CAfile: ./cacert-bitly.pem
...
* TLSv1.3 (OUT), TLS alert, unknown CA (560):
} [2 bytes data]
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 1
curl: (60) SSL certificate problem: unable to get local issuer certificate
这表明我提供的证书似乎适用于连接到bit.ly
,但现在curl 正在尝试raw.githubusercontent.com
使用我提供的相同.pem
文件连接到 ,该文件不包含第二个域的证书。于是我重用了之前的命令来获取 的证书raw.githubusercontent.com
,即:
openssl s_client -showcerts -servername raw.githubusercontent.com -connect raw.githubusercontent.com:443 > cacert-githubusercontent.pem
我再次将第二个证书复制到证书目录/etc/ssl/certs
,执行update-ca-certificates
and c_rehash
,然后重试curl命令,但它再次不起作用(再次,我可能以错误的方式完成了更新)。然后我将第二个证书附加到第一个证书,以便两个证书都可以在一个文件中用于curl 命令,如下所示:
cat cacert-githubusercontent.pem >> cacert.pem
最后,我运行:
curl -vsSL https://bit.ly/2ysbOFE --cacert ./cacert.pem | bash -s
它起作用了。
我的问题是:
- 为什么 bit.ly 的证书丢失了?
- curl 无法自行确定要使用哪个证书的原因是什么?
- 为什么curl 要求提供该文件
909be051.0
? - 我这样做的方式安全吗?
- 我可以更容易地做到这一点吗?
预先非常感谢您!
PS:我是在 VMWare 虚拟机中运行的 Ubuntu 18.04.6 上完成所有这些操作的。