it-swarm.com.ru

https соединение с использованием CURL из командной строки

Я новичок в мире Curl и Cacerts и сталкиваюсь с проблемой при подключении к серверу . В основном мне нужно проверить подключение по https от одного компьютера к другому компьютеру .. У меня есть URL, к которому мне нужно подключиться с машины A (машина Linux) Я попробовал это в командной строке

cmd> curl https://[my domain or IP address]

и получил следующее:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Проходя через некоторые статьи через Интернет, я сделал это:

openssl s_client -connect <domain name or Ip address>:443

и получил некоторый ответ, включая сертификат сервера .__ (внутри -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----).

Что мне делать дальше отсюда. Я думаю, мне нужно будет просто скопировать вставить текст внутри BEGIN CERTIFICATE & END CERTIFICATE и сохранить его в файл . Но, Какой тип файла это должен быть? .pem, .crt? .. Что мне делать после этого?

Я попробовал это - скопировал текст внутри BEGIN CERTIFICATE & END CERTIFICATE и сохранил его в файле .crt - назвал его my-ca.crt (также попытался сделать то же самое, назвав его файлом my-ca.pem) , А затем сделал это:

cmd>curl --cacert my-ca.crt https://[my domain or IP address]

Но получил ту же ошибку.

88
user1270392

У меня была та же проблема - я выбирал страницу со своего собственного сайта, которая обслуживалась по HTTPS, но curl выдавал то же сообщение «Проблема с сертификатом SSL». Я решил эту проблему, добавив к вызову флаг -k, чтобы разрешить небезопасные соединения.

curl -k https://whatever.com/script.php

Правка: я обнаружил корень проблемы. Я использовал сертификат SSL (от StartSSL, но я не думаю, что это имеет большое значение) и не настроил промежуточный сертификат должным образом. Если у вас та же проблема, что и у user1270392, описанная выше, вероятно, будет хорошей идеей проверить ваш сертификат SSL и исправить все проблемы с ним, прежде чем прибегнуть к исправлению curl -k.

110
Dave Child

Простое решение

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

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
26
Antonio Feitosa

Вы должны предоставить всю цепочку сертификатов для curl, так как curl больше не поставляется с какими-либо сертификатами CA. Поскольку опция cacert может использовать только один файл, вам нужно объединить полную информацию о цепочке в 1 файл

Скопируйте цепочку сертификатов (например, из браузера) в двоичный код в формате DER x.509 (.cer). Сделайте это для каждого сертификата. 

Конвертируйте сертификаты в PEM и объедините их в 1 файл. 

openssl x509 -inform DES -in file1.cer -out file1.pem -text
openssl x509 -inform DES -in file2.cer -out file2.pem -text
openssl x509 -inform DES -in file3.cer -out file3.pem -text

cat *.pem > certRepo

curl --cacert certRepo -u user:passwd -X GET -H 'Content-Type: application/json' "https//somesecureserver.com/rest/field"

Я написал блог о том, как это сделать, здесь: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html

21
Somaiah Kumbera

используйте --cacert, чтобы указать файл .crt. ca-root-nss.crt например. 

14
ano

У меня действительно была такая проблема, и я решаю ее с помощью следующих шагов:

  1. Получите пакет сертификатов корневого CA отсюда: https://curl.haxx.se/ca/cacert.pem и сохраните его на локальном 

  2. Найдите файл php.ini

  3. Установите curl.cainfo как путь к сертификатам. Так будет что то вроде 

curl.cainfo = /path/of/the/keys/cacert.pem

5
geckob

диагностировав проблему Я смог использовать существующий системный файл CA по умолчанию, в Debian 6 это:

/etc/ssl/certs/ca-certificates.crt

от имени root это можно сделать так:

echo curl.cainfo=/etc/ssl/certs/ca-certificates.crt >> /etc/php5/mods-available/curl.ini

затем перезапустите веб-сервер.

1
Jasen

ты мог бы использовать это

curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);

1
Ahmed Ali

Здесь вы можете найти сертификаты CA с инструкциями по загрузке и преобразованию сертификатов Mozilla CA . Как только вы получите ca-bundle.crt или cacert.pem, вы просто используете:

curl.exe --cacert cacert.pem https://www.google.com

или же 

curl.exe --cacert ca-bundle.crt https://www.google.com
1
lmiguelmh

Для меня я просто хотел протестировать веб-сайт с автоматическим перенаправлением http-> https. Я думаю, что у меня уже установлены некоторые сертификаты, так что это само по себе работает на Ubuntu 16.04 с запущенной curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3

curl --proto-default https <target>

0
SamCyanide