我在Centos7上运行的应用程序需要通过HTTPS连接到远程主机。但是,它无法验证证书并失败。另外,如果我尝试使用wget从服务器下载文件,我会收到以下错误:
[root@foo:~]# wget https://10.65.127.9/index.html
--2017-05-22 09:03:01-- https://10.65.127.9/index.html
Connecting to 10.65.127.9:443... connected.
ERROR: cannot verify 10.65.127.9's certificate, issued by ‘/CN=us6877vnxe7827’:
Unable to locally verify the issuer's authority.
To connect to 10.65.127.9 insecurely, use `--no-check-certificate'.
所以我从主持人那里得到了证书:
openssl s_client -connect 10.65.127.9:443 <<<'' | openssl x509 -out /etc/pki/ca-trust/source/anchors/mycert.pem
执行以下操作来处理它:
update-ca-trust extract
然而,这会产生同样的问题。如果我跑:
openssl s_client -connect 10.65.127.9:443 -showcerts -debug
我确实收到了一些错误和各种消息:
depth=0 CN = us6877vnxe7827
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = us6877vnxe7827
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=us6877vnxe7827
i:/CN=us6877vnxe7827
Server certificate
subject=/CN=us6877vnxe7827
issuer=/CN=us6877vnxe7827
---
No client certificate CA names sent
---
Verify return code: 21 (unable to verify the first certificate)
我可能缺少什么想法?如果有任何进一步的信息有帮助,请告诉我。
答案 0 :(得分:1)
对于wget
,您需要提供签署https服务器证书的证书颁发机构(CA)证书。如果您拥有这些CA证书,请在--ca-certificate=file
或--ca-directory=directory
选项
如果您没有它们并且想要跳过https服务器证书验证(不安全且可能有危险),请使用--no-check-certificate
选项。
答案 1 :(得分:0)
Jenkins试图连接到我们的GitLab服务器时遇到了同样的问题。 在我们的案例中,服务器确实有一个有效的官方证书,但Java除此之外没有。
您下载证书是正确的。
但是,您提到的应用程序可能正在Java虚拟机中运行(因为很多应用程序都是这样)。 因此,从您将证书下载到PEM文件的角度来看,您可能不得不将其添加到VM的可信证书中。
This article描述了如何做到这一点。希望它有所帮助。