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

Вопрос или проблема

Когда я пытаюсь выполнить HTTPS-запрос к google.com, я недавно начал видеть следующее:

[root@ip-172-31-47-76 ~]# curl -I -v https://google.com
* Rebuilt URL to: https://google.com/
*   Trying 216.58.193.78...
* TCP_NODELAY set
* Connected to google.com (216.58.193.78) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* Server certificate:
*       subject: CN=*.google.com,O=Google Inc,L=Mountain View,ST=California,C=US
*       start date: Feb 20 14:17:23 2018 GMT
*       expire date: May 15 14:08:00 2018 GMT
*       common name: *.google.com
*       issuer: CN=Google Internet Authority G2,O=Google Inc,C=US
* NSS error -8172 (SEC_ERROR_UNTRUSTED_ISSUER)
* Peer's certificate issuer has been marked as not trusted by the user.
* stopped the pause stream!
* Closing connection 0
curl: (60) Peer's certificate issuer has been marked as not trusted by the user.
More details here: https://curl.haxx.se/docs/sslcerts.html

Это влияет на мою способность обновлять систему, так как запросы обновления yum также не выполняются. Я пробовал повторно импортировать сертификаты, используя инструкции с этой страницы: https://access.redhat.com/solutions/1549003. Также пытался вручную добавить сертификат Google, используя инструкции отсюда: https://curl.haxx.se/docs/sslcerts.html. Ничего не сработало.

Не уверен, связано ли это, но я попробовал разобраться с помощью утилиты certutil, но ее нельзя запустить

[root@ip-172-31-47-76 ~]# certutil
certutil: /usr/local/firefox/libnss3.so: version `NSS_3.30' not found (required by certutil)

Не совсем уверен, что здесь произошло, но буду признателен за любую помощь. Это используется в образе Amazon Linux.

Я не смог сымитировать вашу ошибку, но полагаю, что она будет решена после ручного обновления сертификата. Для этого вы можете использовать инструмент ‘openssl’, простой способ извлечь сертификат CA для конкретного сервера:

1. Получите публичный сертификат сервера и сохраните в файл conn_cert.log.pem, набрав следующую команду (и нажмите Enter)

openssl s_client -showcerts -servername https://google.com -connect google.com:443 > conn_cert.log.pem

2. Теперь введите “quit” и нажмите Enter

3. Файл “conn_cert.log.pem” содержит сертификат между строками “BEGIN CERTIFICATE” и “END CERTIFICATE”, но в нем есть и другие сообщения журнала. Теперь мы извлечем только сертификат из журнала и сохраним его в файл “google_public.crt”.

openssl x509 -inform PEM -in conn_cert.log.pem -text -out google_public.crt

4. Наконец, замените плохой сертификат на новый:

cp google_public.crt /etc/pki/tls/certs/ca-bundle.crt

5. Проверьте снова и будьте счастливы.

Ссылки:

Ответ или решение

При работе с протоколом TLS, одной из частых проблем, с которой могут сталкиваться пользователи, является ошибка "Peer’s certificate issuer has been marked as not trusted by the user". Эта ошибка свидетельствует о том, что сертификат, предоставленный сервером, не может быть проверен, так как сертификат удостоверяющего центра (CA) отсутствует или не доверен в вашей системе.

Теория (T):

Коммуникации через HTTPS используют протоколы TLS (Transport Layer Security) и SSL (Secure Sockets Layer) для обеспечения шифрования данных. В этой системе безопасность обеспечивается с помощью цифровых сертификатов, выданных доверенными центрами сертификации (CA). Каждый раз, когда клиент, такой как ваш браузер или утилита curl, пытается установить зашифрованное соединение с сервером, он получает сертификат сервера. Этот сертификат затем проверяется на подлинность и авторитетность с помощью межсертификатов, выданных CA.

Когда вы видите сообщение об ошибке "SEC_ERROR_UNTRUSTED_ISSUER", это означает, что ваш клиентский инструмент, использующий библиотеку NSS (Network Security Services), не может доверять сертификату сервера из-за недоверенного CA или проблем с местной системой доверия сертификатов.

Пример (E):

Ваш пример попытки использовать команду curl для подключения к google.com показывает, что сертификат была отвергнута клиентом. Исходя из вашего вывода, можно увидеть следующее:

  1. Ваша система использует библиотеку NSS для работы с сертификатами.
  2. Сертификат google.com был получен, с датами начала и окончания срока действия указаны, что может отмечать его как валидный при условии, что дата в вашей системе установлена правильно.
  3. Сертификат был выдан Google Internet Authority G2, который является общепринятым и доверенным сертификатом.
  4. Вы столкнулись с ошибкой NSS: SEC_ERROR_UNTRUSTED_ISSUER, что указывает на то, что путь к сертификату в вашей системе может быть поврежден.

Применение (A):

Для решения данной проблемы, вам необходимо выполнить ряд действий, чтобы восстановить доверие к необходимым сертификатам в вашей системе. Вот пошаговый процесс диагностики и устранения проблемы:

  1. Проверка системного времени и даты: Убедитесь, что время и дата в вашей системе установлены верно. Неправильные временные настройки могут вызвать проблемы с проверкой сертификатов.

  2. Обновление корневых сертификатов: Существует вероятность, что текущие корневые сертификаты в вашей системе устарели. Попробуйте обновить их:

    sudo yum update ca-certificates
  3. Диагностика других библиотек: Ваша установка может быть несовместима с версией NSS. Попробуйте обновить или доустановить необходимые пакеты с помощью следующей команды:

    sudo yum install nss libnss3-tools
  4. Устранение проблем с библиотекой NSS: Поскольку certutil сообщает об отсутствии определенной версии NSS, возможно, необходимо обновить или переустановить саму библиотеку:

    sudo yum update nss
  5. Ручная установка доверенного сертификата: Несмотря на ранее проделанную попытку, попробуйте заново получить правильный сертификат для Google и вручную добавить его в системное хранилище CA сертификатов, как описано в общих рекомендациях:

    openssl s_client -showcerts -servername google.com -connect google.com:443 </dev/null 2>/dev/null|openssl x509 -outform PEM > google_cert.pem
    sudo cp google_cert.pem /etc/pki/ca-trust/source/anchors/
    sudo update-ca-trust
  6. Проверка с окружения: Попробуйте запустить ту же команду curl, но с другой утилитой openssl, чтобы убедиться, что проблема действительно связана с сертификатами:

    openssl s_client -connect google.com:443

Эти шаги должны помочь вам восстановить корректную проверку сертификатов в вашей системе и избежать подобных ошибок в будущем.

Оцените материал
Добавить комментарий

Капча загружается...