как использовать curl для проверки отзыва сертификата сайта?

проверить если сертификат для google.com был отозван, я попробовал следующую команду:

curl https://www.google.com --cacert GeoTrust_Global_CA.pem --crlfile gtglobal.pem -v

, но я получил страшную ошибку "проблема сертификата SSL":

* About to connect() to www.google.com port 443 (#0)
*   Trying 81.24.29.91... connected
* successfully set certificate verify locations:
*   CAfile: GeoTrust_Global_CA.pem
  CApath: /etc/ssl/certs
* successfully load CRL file:
*   CRLfile: gtglobal.pem
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
* Closing connection #0
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

Я думаю, что эта ошибка не является правильным, так как Google должен иметь действительный сертификат.

знаете ли вы, как я могу выполнить команду curl, которая делает это правильно?

более подробная информация

Если вам интересно, почему я использовал эти конкретные файлы (GeoTrust_Global_CA.pem и gtglobal.pem) в команде curl, вот как я продолжил:

  • я впервые посмотрел на то, что CA выдал сертификат дляhttps://www.google.com. Оказывается, это GeoTrust Global CA;
  • я скачал корневой сертификат GeoTrust Global CA из здесь (это GeoTrust_Global_CA.файл PEM);
  • я скачал соответствующий CRL (список отзыва сертификатов) из здесь (это gtglobal.файл PEM).
9
задан Claudiu
05.11.2022 21:45 Количество просмотров материала 2804
Распечатать страницу

3 ответа

по-видимому, вы не можете просто проверить сайт с помощью одного простого запроса. См.https://stackoverflow.com/questions/16244084/how-to-programmatically-check-if-a-certificate-has-been-revoked?lq=1 и более старые связанные вопросы по stackoverflow.

curl не работает с Списки Отозванных Сертификатов для меня тоже, ни на Windows, ни на Linux. Почему вы должны использовать curl? Openssl кажется более уместно:

openssl s_client -connect www.google.com:443

мы

---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---

после этого мы можем проверить некоторый сертификат:

curl http://pki.google.com/GIAG2.crt | openssl x509 -inform der -text

grep crl в выводе команды выше. Интересные части:

        X509v3 CRL Distribution Points:
            URI:http://crl.geotrust.com/crls/gtglobal.crl

        Authority Information Access:
            OCSP - URI:http://gtglobal-ocsp.geotrust.com

теперь мы можем вручную проверить crl:

curl http://crl.geotrust.com/crls/gtglobal.crl | openssl crl -inform der -text
curl http://pki.google.com/GIAG2.crl | openssl crl -inform der -text

теперь мы видим список отозванных сертификатов. ИМХО, использования curl недостаточно, требуется другая программа для проверки сертификатов. Делая простой

strace curl https://www.google.com   -v

мы видим, что завиток не проверка отзыва (даже без подключения к соответствующим местам). Он просто говорит:

* Server certificate:
*        subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*        start date: 2014-04-09 11:40:11 GMT
*        expire date: 2014-07-08 00:00:00 GMT
*        subjectAltName: www.google.com matched
*        issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*        SSL certificate verify ok.
8
отвечен MKaama 2022-11-07 05:33

Это мой повседневный скрипт:

curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'

выход:

* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*    start date: 2016-01-07 11:34:33 GMT
*    expire date: 2016-04-06 00:00:00 GMT
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
* Server GFE/2.0 is not blacklisted
* Connection #0 to host www.google.com left intact
6
отвечен Antonio Feitosa 2022-11-07 07:50

видимо это довольно распространенная проблема на Windows, как этот вопрос на StackOverflow показывает. Я специально имею в виду ответ пользователя Артур курицын, который я цитирую здесь для вашего удобства:

это довольно распространенная проблема в Windows. Вам нужно как раз установить cacert.pem до curl.cainfo.

начиная с PHP 5.3.7 вы можете сделать:

  1. скачать http://curl.haxx.se/ca/cacert.pem и сохраните его где-то.
  2. обновление php.ini -- add curl.cainfo = "PATH_TO/cacert.pem"

в противном случае вам нужно будет сделать следующее для каждого ресурса cURL:

curl_setopt ($ch, CURLOPT_CAINFO, "PATH_TO/cacert.pem");

и в этой статье также может быть полезным.

3
отвечен user1301428 2022-11-07 10:07

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх