Вопрос или проблема
Когда я пытаюсь выполнить 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 показывает, что сертификат была отвергнута клиентом. Исходя из вашего вывода, можно увидеть следующее:
- Ваша система использует библиотеку NSS для работы с сертификатами.
- Сертификат google.com был получен, с датами начала и окончания срока действия указаны, что может отмечать его как валидный при условии, что дата в вашей системе установлена правильно.
- Сертификат был выдан Google Internet Authority G2, который является общепринятым и доверенным сертификатом.
- Вы столкнулись с ошибкой NSS: SEC_ERROR_UNTRUSTED_ISSUER, что указывает на то, что путь к сертификату в вашей системе может быть поврежден.
Применение (A):
Для решения данной проблемы, вам необходимо выполнить ряд действий, чтобы восстановить доверие к необходимым сертификатам в вашей системе. Вот пошаговый процесс диагностики и устранения проблемы:
-
Проверка системного времени и даты: Убедитесь, что время и дата в вашей системе установлены верно. Неправильные временные настройки могут вызвать проблемы с проверкой сертификатов.
-
Обновление корневых сертификатов: Существует вероятность, что текущие корневые сертификаты в вашей системе устарели. Попробуйте обновить их:
sudo yum update ca-certificates
-
Диагностика других библиотек: Ваша установка может быть несовместима с версией NSS. Попробуйте обновить или доустановить необходимые пакеты с помощью следующей команды:
sudo yum install nss libnss3-tools
-
Устранение проблем с библиотекой NSS: Поскольку certutil сообщает об отсутствии определенной версии NSS, возможно, необходимо обновить или переустановить саму библиотеку:
sudo yum update nss
-
Ручная установка доверенного сертификата: Несмотря на ранее проделанную попытку, попробуйте заново получить правильный сертификат для 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
-
Проверка с окружения: Попробуйте запустить ту же команду curl, но с другой утилитой openssl, чтобы убедиться, что проблема действительно связана с сертификатами:
openssl s_client -connect google.com:443
Эти шаги должны помочь вам восстановить корректную проверку сертификатов в вашей системе и избежать подобных ошибок в будущем.