Подтвердить что ты не робот

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

Я новичок в мире Curl и Cacerts и сталкиваюсь с проблемой при подключении к серверу. В принципе, мне нужно проверить подключение через https от одной машины к другой машине. У меня есть URL-адрес, к которому мне нужно подключиться от Machine 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 file) а затем сделал следующее:

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Скопируйте цепочку сертификатов (например, из вашего браузера) в двоичную кодировку DER, закодированную 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

Ответ 4

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

Ответ 6

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

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

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

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

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

Ответ 8

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

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

как root, это можно сделать следующим образом:

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

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

Ответ 9

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

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

Ответ 10

Для меня я просто хотел протестировать сайт с автоматическим перенаправлением 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>

Ответ 11

В современных версиях curl вы можете просто переопределить, к какому ip-адресу подключаться, используя --resolve или --connect-to (curl новее, чем версия 7.49). Это работает даже с SSL/SNI. Все подробности в справочной странице.

Например, чтобы переопределить DNS и подключиться к www.example.com с помощью ssl, используя определенный IP-адрес: (Это также переопределит ipv6)

curl --resolve www.example.com:443:192.168.42.2 https://www.example.com/

Другой пример, чтобы подключиться к определенному внутреннему серверу с именем backend1 на порт 8080

curl --connect-to www.example.com:80:backend1.example.com:8080 http://www.example.com/

Не забудьте добавить заголовок хоста, если сервер нуждается в том, чтобы ответить правильно:

-H 'Host:www.example.com'