Как исправить ошибку «Сертификат SSL: самозаверяющий сертификат в цепочке сертификатов»? - PullRequest
0 голосов
/ 28 января 2019

У меня есть контейнер Docker на базе Linux, где, если я делаю:

curl https://google.com

..., тогда я получаю ошибку:

curl: (60) SSLпроблема с сертификатом: самозаверяющий сертификат в цепочке сертификатов Подробнее здесь: https://curl.haxx.se/docs/sslcerts.html

То же самое происходит с любым URL - не виноват Google.

Ссылка, указанная выше, предлагаетразличные решения, ни одно из которых не кажется подходящим, кроме, возможно, последнего, которое предлагает обновить хранилище сертификатов.Но нет никаких инструкций о том, как это сделать (или, по крайней мере, тех, которые не имеют смысла для меня).

Это правильно, и если да, то как?


ОБНОВЛЕНИЕ : по запросу, вот результат:

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), и я думаю, что это проблема.

Прав ли я, думая, что мне нужно установить какой-то ключ для этого сертификата?Это все гречески для меня, поэтому извиняюсь за вопросы новичка.

1 Ответ

0 голосов
/ 28 января 2019

Возможно, в контейнере отсутствуют правильные сертификаты CA, поэтому невозможно проверить соединения TLS.

Попробуйте установить ca-certificates пакет (пакет может иметь другое имя, это зависит отиспользуемый дистрибутив).


ОБНОВЛЕНИЕ:

Ваша компания проверяет соединения TLS в корпоративной сети, поэтому оригинальные сертификаты заменяются сертификатами вашей компании.Вам необходимо добавить сертификат CA вашей компании в сертификаты корневого CA.

Linux (Ubuntu, Debian):

  • скопировать сертификат CA компании в каталог /usr/local/share/ca-certificates/
  • запустите sudo update-ca-certificates

Если в вашей хост-операционной системе уже предварительно правильно настроены сертификаты CA (включая сертификаты CA компании), вы можете просто смонтировать их как том в контейнер:

docker run \
  -v /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt \
  ...

Типичные местоположения сертификатов CA:

  • /etc/ssl/certs/ca-certificates.crt Debian / Ubuntu / Gentoo и т. Д.
  • /etc/pki/tls/certs/ca-bundle.crt Fedora / RHEL 6
  • /etc/ssl/ca-bundle.pem OpenSUSE
  • /etc/pki/tls/cacert.pem OpenELEC
  • /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem CentOS / RHEL 7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...