我有一个基于Linux的Docker容器,如果我这样做:
curl https://google.com
...然后我收到一个错误:
curl:(60)SSL证书问题:证书链中的自签名证书此处提供更多详细信息:https://curl.haxx.se/docs/sslcerts.html
同样的情况也发生在任何URL上--这不是谷歌的错。
上面提到的链接建议了各种解决方案,除了最后一个建议更新证书存储区之外,似乎没有一个合适的解决方案。但是没有关于如何更新的说明(或者至少对我来说没有一个有意义的说明)。
这是正确的做法吗?如果是,怎么做?
UPDATE:根据请求,以下是以下操作的结果:
openssl s_client -showcerts -connect www.google.com:443
CONNECTED(00000003)
depth=3 DC = com, DC = forestroot, CN = SHA256RootCA
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com
i:/CN=ssl-decrypt
-----BEGIN CERTIFICATE-----
MIIDXzCCAkegAwIBAgIIXIk3p8xOX/kwDQYJKoZIhvcNAQELBQAwFjEUMBIGA1UE
AxMLc3NsLWRlY3J5cHQwHhcNMTgxMjE5MDgxNzAwWhcNMTkwMzEzMDgxNzAwWjBo
...
tq0VAGIoj4+YhO6bktTq3alCRoLstJuuxjVdb1wRkH4YRi0I6ZAB1Cw+M8Lg+2eQ
KuEo
-----END CERTIFICATE-----
1 s:/CN=ssl-decrypt
i:/DC=com/DC=bgs/CN=SHA256IssueCA
-----BEGIN CERTIFICATE-----
MIIGzDCCBLSgAwIBAgITEQAADvB9T7mSaacwDQABAAAO8DANBgkqhkiG9w0BAQsF
ADBCMRMwEQYKCZImiZPyLGQBGRYDY29tMRMwEQYKCZImiZPyLGQBGRYDYmdzMRYw
...
1z9f/nkj2XTRyGeACoy0qRd5uXJHp1iGM27l3RFDR9OjrfPV56pOBUYWAlc9Nn+1
Vr3qUZrcCkROrmYisVF4jg==
-----END CERTIFICATE-----
2 s:/DC=com/DC=MyCompanyServer/CN=SHA256IssueCA
i:/DC=com/DC=MyCompanyServer/CN=SHA256RootCA
-----BEGIN CERTIFICATE-----
MIIH4zCCBcugAwIBAgITOQAAAAOa4wv9nnK0uQAAAAAAAzANBgkqhkiG9w0BAQsF
ADBIMRMwEQYKCZImiZPyLGQBGRYDY29tMRowGAYKCZImiZPyLGQBGRYKZm9yZXN0
...
IomErcbcymIWBmN75PVMsk9EMyqDP394jG8+IOK+lVUVX4pxzhdd7eYbqTAwDE1X
bNWcZZkt/w==
-----END CERTIFICATE-----
3 s:/DC=com/DC=MyCompanyServer/CN=SHA256RootCA
i:/DC=com/DC=MyCompanyServer/CN=SHA256RootCA
-----BEGIN CERTIFICATE-----
MIIFgzCCA2ugAwIBAgIQULxmYXGJ1aFIlIyCHA4NIzANBgkqhkiG9w0BAQsFADBI
MRMwEQYKCZImiZPyLGQBGRYDY29tMRowGAYKCZImiZPyLGQBGRYKZm9yZXN0cm9v
...
jQBLY0/KIjHywv66GhtVWpexgQcXrLxQP2VHW7eXpsylvwkNU5XNQYzHTB7u+w5C
VunfRLt/7mVWyURcwkOre38tVSByKR4=
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com
issuer=/CN=ssl-decrypt
---
No client certificate CA names sent
Peer signing digest: SHA256
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 6556 bytes and written 302 bytes
Verification error: self signed certificate in certificate chain
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: 723D9976F985887CA5F256EE3C2E7B44B9C98A6B440AAF4E19564AE101F78D00
Session-ID-ctx:
Master-Key: C3D8759A753C1D269FF9C00854E59B8C10ABC1E94AFE9F0166486A649FE295ACE1AF5E5BEDB0129E557E781BC860D2FA
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1548690163
Timeout : 7200 (sec)
Verify return code: 19 (self signed certificate in certificate chain)
Extended master secret: yes
---
read:errno=0
我从中收集到的是,在这个链中有一个证书属于我工作的公司(我已经将其重命名为MyCompanyServer),我想这就是问题所在。
我认为我需要为那个证书安装某种密钥,对吗?这对我来说都是希腊语,所以为新手的问题道歉。
4条答案
按热度按时间db2dz4w81#
可能您的容器中没有可用的正确CA证书,因此无法验证TLS连接。
尝试安装
ca-certificates
包(包可能有不同的名称,这取决于使用的发行版)。更新日期:
您的公司会检查公司网络中的TLS联机,因此原始凭证会被您的公司凭证取代。您必须将您的公司CA凭证新增到根CA凭证。
Linux(Ubuntu、Debian):
/usr/local/share/ca-certificates/
sudo update-ca-certificates
如果您的主机操作系统已经正确地预配置了CA证书(包括公司CA证书),则您可以将它们作为卷装载到容器中:
典型的CA证书位置:
/etc/ssl/certs/ca-certificates.crt
Debian/Ubuntu/Gentoo等软件/etc/ssl/ca-bundle.pem
开放式SUSE/etc/pki/tls/cacert.pem
开放式电气ffdz8vbo2#
好的,我刚刚添加了这条语句,它现在工作正常。
hgtggwj03#
我正在使用此代码发送cUrl请求,它没有工作,并抛出此错误:
SSL证书问题:证书链中的自签名证书
在尝试了所有方法后,我已将cUrl请求更改为:
最后对我有效:)
kmbjn2e34#
如果你只想让curl在不检查证书的情况下工作,那么就把它添加到你的Dockerfile中: