Centos 7,6
Скручиваемость 7,29

Мое приложение должно выполнять запросы Curl, которые исходят от пользовательских запросов, но некоторые URL-адреса возвращают curl: (60) Peer's Certificate issuer is not recognized.

Пока что у меня есть:

Скачанный последний пакет cacert sudo curl -k https://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt .

Проверено, чтобы увидеть последний установленный пакет:sudo vi /etc/pki/tls/certs/ca-bundle.crt

#
# Bundle of CA Root Certificates
#
# Certificate data from Mozilla as of: Wed Jan 23 04:12:09 2019 GMT
# 
...

Запустил несколько тестовых HTTPS-URL, таких как superuser.com, которые без проблем закручиваются.

 curl -v https://superuser.com/questions/1091521/centos-7-wont-accept-any-ssl-certificates

 About to connect() to superuser.com port 443 (#0)
   Trying 151.101.1.69...
 Connected to superuser.com (151.101.1.69) port 443 (#0)
 Initializing NSS with certpath: sql:/etc/pki/nssdb
   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
 SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
 Server certificate:
       subject: CN=*.stackexchange.com,O="Stack Exchange, Inc.",L=New York,ST=NY,C=US
       start date: Oct 05 00:00:00 2018 GMT
       expire date: Aug 14 12:00:00 2019 GMT
       common name: *.stackexchange.com
       issuer: CN=DigiCert SHA2 High Assurance Server CA,OU=www.digicert.com,O=DigiCert Inc,C=US
 GET /questions/1091521/centos-7-wont-accept-any-ssl-certificates HTTP/1.1
 User-Agent: curl/7.29.0
 Host: superuser.com
 Accept: */*

 HTTP/1.1 200 OK
...

Затем я тестирую пару URL-адресов, которые также используют HTTPS, но возвращают curl: (60) Peer's Certificate issuer is not recognized. ошибка.

curl -v https://www.movistar.com

 About to connect() to www.movistar.com port 443 (#0)
   Trying 194.224.110.42...
 Connected to www.movistar.com (194.224.110.42) 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=www.movistar.com,O=Telefonica S.A.,L=Madrid,ST=Madrid,C=ES
       start date: Jul 05 12:51:04 2018 GMT
       expire date: Aug 29 09:01:02 2019 GMT
       common name: www.movistar.com
       issuer: CN=GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
 NSS error -8179 (SEC_ERROR_UNKNOWN_ISSUER)
 Peer's Certificate issuer is not recognized.
 Closing connection 0
curl: (60) Peer's Certificate issuer is not recognized.
More details here: http://curl.haxx.se/docs/sslcerts.html

а также


curl -v https://signup.lotro.com

 About to connect() to signup.lotro.com port 443 (#0)
   Trying 198.252.160.63...
 Connected to signup.lotro.com (198.252.160.63) 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=*.lotro.com,OU=Standing Stone Games LLC,O=Standing Stone Games,L=Needham,ST=ma,C=US
       start date: Mar 12 00:00:00 2018 GMT
       expire date: Mar 20 12:00:00 2019 GMT
       common name: *.lotro.com
       issuer: CN=DigiCert SHA2 High Assurance Server CA,OU=www.digicert.com,O=DigiCert Inc,C=US
 NSS error -8179 (SEC_ERROR_UNKNOWN_ISSUER)
 Peer's Certificate issuer is not recognized.
 Closing connection 0
curl: (60) Peer's Certificate issuer is not recognized.
More details here: http://curl.haxx.se/docs/sslcerts.html

Единственный способ заставить эти URL работать, отключив проверку сертификата, например, curl -v --insecure https://signup.lotro.com .

Принимая во внимание, что URL взяты из пользовательских запросов, как я могу заставить эти URL свернуться без получения этой ошибки и без использования аргумента --insecure ?

Примечание. В настоящее время я работаю на виртуальной виртуальной машине, но такая же проблема возникает и на моем VPS.

Примечание 2: Обратите внимание, что издатель для superuser.com и signup.lotro.com одинаков, но я могу только свернуть superuser.com.

1 ответ1

0

Отчет SSLLabs для обоих доменов показывает:

Цепочка сертификатов этого сервера неполная

Другими словами: неправильная конфигурация сервера вызывает ошибку, которую вы видите. В то время как настольные браузеры пытаются обойти это, более простые инструменты, такие как curl , не делают. Чтобы это исправить, вам нужно явно добавить отсутствующий сертификат CA в ваше хранилище доверенных сертификатов. В случае www.movistar.com это будет CA для проверки соответствия GlobalSign - SHA256 - G2, а для signup.lotro.com - это CA DigiCert SHA2 High Assurance Server. Вы можете загрузить отсутствующие сертификаты CA как PEM по предоставленным мною ссылкам, а затем добавить их в свое хранилище доверенных сертификатов, а затем вызвать curl с этим хранилищем доверенных сертификатов:

$ ( 
  curl https://censys.io/certificates/74ef335e5e18788307fb9d89cb704bec112abd23487dbff41c4ded5070f241d9/pem/raw;
  echo;
  curl https://censys.io/certificates/19400be5b7a31fb733917700789d2f0a2471c0c9d506c0e504c06c16d7cb17c0/pem/raw;
  echo;
  cat /etc/ssl/certs/ca-certificates.crt 
) > myca.pem
$ curl -v --cacert myca.pem https://www.movistar.com 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .