root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* About to connect() to {abc} port 21 (#0)
*   Trying {abc}...
* Connected to {abc} ({abc}) port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-This is the UNLICENSED Home Edition and may be used for home, personal use only
< 220-Welcome to Cerberus FTP Server
< 220 Created by Cerberus, LLC
> AUTH SSL
< 234 Authentication method accepted
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

当前回答

由于conda环境,一些系统可能存在此问题。如果你安装了conda,那么禁用它可以解决你的问题。在我的情况下,当我停用conda时,这个curl-SSL错误得到了解决。在ubuntu或MacOS上试试这个命令

conda deactivate

其他回答

这很可能是服务器上丢失的证书。

根- >中间- >服务器

服务器至少应该发送服务器和中间体。

使用openssl s_client -showcerts -starttls ftp -crlf -connect abc:21进行调试。

如果只返回一个证书(自签名或颁发),那么您必须选择:

修复服务器 信任该证书并将其添加到您的CA证书存储(不是最好的主意) 禁用信任,例如curl -k(非常糟糕的主意)

如果服务器返回多个,但不包括自签名(根)证书:

在此链的CA存储中安装CA(根)证书,例如谷歌颁发者。(只有当你信任该CA时) 服务器是否将CA作为链的一部分发送 信任链中的证书 禁用的信任

如果服务器返回一个根CA证书,那么它不在您的CA存储中,您的选项是:

添加(信任)它 禁用的信任

我忽略了过期/撤销的证书,因为没有消息表明它。但是您可以使用openssl x509 -text检查certs

假设您正在连接到家庭版(https://www.cerberusftp.com/support/help/installing-a-certificate/) ftp服务器,我将说它是自签名的。

请发布更多细节,比如来自openssl的输出。

对我来说,简单地安装证书有帮助:

sudo apt-get install ca-certificates

在所有的ca中,我对Digicert有这个问题。我创建了一个数字文件。Pem文件,只是中间和根粘贴到一个文件。

curl https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
curl https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt.pem

curl -v https://mydigisite.com/sign_on --cacert DigiCertCA.pem
...
*  subjectAltName: host "mydigisite.com" matched cert's "mydigisite.com"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
*  SSL certificate verify ok.
> GET /users/sign_in HTTP/1.1
> Host: mydigisite.com
> User-Agent: curl/7.65.1
> Accept: */*
...

Eorekan有答案,但只有我和另一个人对他的答案进行了投票。

尝试在Ubuntu中重新安装curl,并使用sudo update-ca-certificates—fresh更新我的CA证书

输入这两个代码以禁用SSL证书颁发。这对我很有效 经过大量研究,我发现了这个。

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);