在 Cygwin 中对 HTTPS URL 运行 wget 时,如何修复证书错误?

例如,运行wget https://www.dropbox.com会导致以下错误:

ERROR: The certificate of `www.dropbox.com' is not trusted.
ERROR: The certificate of `www.dropbox.com' hasn't got a known issuer.
341827 次浏览

首先,需要安装SSL证书。指令(基于https://stackoverflow.com/a/4454754/278488):

pushd /usr/ssl/certs
curl http://curl.haxx.se/ca/cacert.pem | awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
c_rehash

上述内容足以修复curl,但wget需要一个额外的符号链接:

ln -sT /usr/ssl /etc/ssl

如果问题是一个已知的根CA缺失,并且当你使用ubuntu或debian时,那么你可以用这一行来解决问题:

sudo apt-get install ca-certificates

如果您不关心检查证书的有效性,只需在wget命令行上添加--no-check-certificate选项。这对我来说很有效。

注意:这将使您容易受到中间人(MitM)攻击,不建议在任何您关心安全性的情况下使用。

看看目前的解决方案在这里,我觉得我必须描述一个合适的解决方案。

首先,你需要通过cygwin的setup.exe安装cygwin包ca-certificates来获得证书。

不要使用curl或类似的黑客来下载证书(作为相邻的回答建议),因为这从根本上是不安全的,可能会危及系统。

第二,你需要告诉wget你的证书在哪里,因为在Cygwin环境中默认情况下它不会拾取它们。如果你可以通过命令行参数--ca-directory=/usr/ssl/certs(最适合shell脚本)或通过将ca_directory = /usr/ssl/certs添加到~/.wgetrc文件来做到这一点。

你也可以通过运行ln -sT /usr/ssl /etc/ssl来解决这个问题,正如在另一个答案中指出的那样,但这将工作。

如果您使用的是windows,只需转到控制面板,单击自动更新,然后单击windows更新网站链接。照着这一步做。至少这对我来说是有效的,不再有证书问题,即无论何时我像以前一样去https://www.dropbox.com

只做

apt-get install ca-certificate
apt-get install ca-certificates

s起了作用;)

也许这会有所帮助:

wget --no-check-certificate https://blah-blah.tld/path/filename

我有类似的问题,并通过暂时禁用我的反病毒(卡巴斯基免费18.0.0.405)修复了它。该反病毒具有HTTPS拦截模块,自动自签名它在HTTPS响应中找到的所有证书。

来自Cygwin的Wget对AV根证书一无所知,所以当它发现网站的证书与不信任证书签署时,它会打印这个错误。

要在不禁用AV的情况下永久修复此问题,您应该将AV根证书从Windows证书存储中复制到/etc/pki/ca-trust/source/anchors中,作为.pem文件(base64编码)并运行update-ca-trust

我也遇到过类似的问题,在安装新的SSL证书后,wget到我自己的实时网站返回错误。我已经检查了几个浏览器,他们没有报告任何错误:

wget --no-cache -O - "https://example.com/..." ERROR: The certificate of ‘example.com’ is not trusted. ERROR: The certificate of ‘example.com’ hasn't got a known issuer.

问题是我安装了错误的证书颁发机构。pem/。来自发行者的CRT文件。通常他们会将SSL证书和CA文件打包成zip文件,但DigiCert会将证书通过电子邮件发送给您,您必须自己找出匹配的CA。https://www.digicert.com/help/有一个SSL证书检查器,它列出了SSL授权和希望匹配的CA,如果它们同意,则用漂亮的蓝色链接图形:

SSL Cert: Issuer GeoTrust TLS DV RSA Mixed SHA256 2020 CA-1

CA: Subject GeoTrust TLS DV RSA Mixed SHA256 2020 CA-1 有效期为2020年7月16日至2023年5月31日 Issuer DigiCert Global Root CA '

. cer '

就在上周,当我们安装一个新创建的证书时,也遇到了同样的问题。我还看过另外两次……但我学得很慢。在这三种情况下,我都必须获得“中级证书”。并安装它们。换句话说,我的证书很好,但它的签名者或签名者的签名者没有正确安装。请务必访问您的证书提供商的网站,获取正确的中间证书,并将它们安装到您的服务器上,这样这个警告就会消失。

它可能不是上面的只是,也可能是客户端没有更新列表…但我会确保这不仅仅是你没有完全安装正确的证书,然后再到客户端,并确保他们的列表更新。

在我的例子中,在树莓派3B上,时间是在未来(2025年),我需要使用ntpdate通过将时间传递到过去来更新为当前的本地时间,它解决了这个问题。

 $ sudo date +%Y%m%d -s "20210101"
$ sudo ntpdate times1.mike.fi

不是完全一样的问题。在docker上,我将主机文件系统挂载到/etc,其中已经安装了OpenSSL certs,这将被覆盖。

改变安装到不同的文件系统可以解决这个问题。

多亏了丹尼斯·巴哈列夫,我破案了。

如果有人有Cygwin wget不工作,因为“证书不受信任”,并安装了ca-certificate,并拥有自动自签名所有证书的反病毒,它在HTTPS响应中发现,那么你需要:

  1. 从你的AV中获取根证书(我用浏览器获得了我的证书:打开任何https网站,检查它的证书,去Certification Path选项卡,点击根证书。然后点击View certificate按钮,进入Details页签,点击Copy to File...按钮。在*中保存证书可以使用默认设置。cer文件)。
  2. 转换*。Cer到*.crt。可以通过以下命令使用Cygwin的OpenSSL:

openssl x509 -inform DER -in <your *.cer certificate file> -out <new cert>.crt

  1. 移动新*。crt文件到ca-directory(在我的情况下是/etc/pki/tls/certs/)。

这足以让我开始工作了。