Я новичок в мире 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]
Но получил ту же ошибку.
источник
--insecure
чтобы игнорировать ошибку SSL.Ответы:
У меня была та же проблема - я загружал страницу со своего сайта, которая обслуживалась по HTTPS, но curl выдавал то же сообщение «Проблема с сертификатом SSL». Я обошел это, добавив
-k
к вызову флаг, разрешающий небезопасные соединения.Изменить: я обнаружил корень проблемы. Я использовал сертификат SSL (от StartSSL, но я не думаю, что это имеет большое значение) и неправильно настроил промежуточный сертификат. Если у вас та же проблема, что и у пользователя 1270392, описанного выше, вероятно, рекомендуется протестировать сертификат SSL и исправить любые проблемы с ним, прежде чем прибегать к
curl -k
исправлению.источник
Простое решение
Это мой повседневный сценарий:
Вывод:
источник
--insecure
соединение через TSL каждый день ...Вам необходимо предоставить всю цепочку сертификатов для curl, поскольку curl больше не поставляется с какими-либо сертификатами CA. Поскольку параметр cacert может использовать только один файл, вам необходимо объединить всю информацию о цепочке в 1 файл.
Скопируйте цепочку сертификатов (например, из браузера) в двоичный код x.509 (.cer) в кодировке DER. Сделайте это для каждого сертификата.
Преобразуйте сертификаты в PEM и объедините их в 1 файл.
Я написал блог о том, как это сделать, здесь: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html
источник
используйте
--cacert
для указания.crt
файла.ca-root-nss.crt
например.источник
У меня действительно была такая проблема, и я решил ее следующими шагами:
Получите комплект сертификатов корневого ЦС отсюда: https://curl.haxx.se/ca/cacert.pem и сохраните его на локальном компьютере.
Найдите
php.ini
файлЗадайте
curl.cainfo
путь к сертификатам. Это будет примерно так:curl.cainfo = /path/of/the/keys/cacert.pem
источник
Здесь вы можете найти сертификаты CA с инструкциями по загрузке и конвертации сертификатов CA Mozilla . Как только вы получите
ca-bundle.crt
илиcacert.pem
просто воспользуетесь:или
источник
Решив проблему, я смог использовать существующий системный файл CA по умолчанию, на debian6 это:
как root это можно сделать так:
затем перезапустите веб-сервер.
источник
ты мог бы использовать это
curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);
источник
Что касается меня, я просто хотел протестировать веб-сайт с автоматическим перенаправлением 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>
источник
В современных версиях curl вы можете просто переопределить, к какому IP-адресу подключаться, используя --resolve или --connect-to (curl новее, чем версия 7.49). Это работает даже с SSL / SNI. Все подробности находятся на странице руководства.
Например, чтобы переопределить DNS и подключиться к www.example.com с помощью ssl, используя определенный IP-адрес: (Это также переопределит ipv6)
Другой пример, для подключения к определенному внутреннему серверу с именем backend1 через порт 8080
Не забудьте добавить заголовок хоста, если серверу это нужно для правильного ответа:
источник