it-swarm.dev

명령 줄에서 CURL을 사용하여 https 연결 사용

Curl과 Cacerts 세계에 처음 다르고 서버에 연결하는 동안 문제가 발생합니다. 기본적으로 한 컴퓨터에서 다른 컴퓨터로 https를 통한 연결을 테스트해야합니다. 나는 기계 A (리눅스 머신)에서 연결해야하는 URL을 가지고있다. 명령 프롬프트에서 이것을 시도했다.

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]

하지만 같은 오류가 발생했습니다.

100
user1270392

나는 같은 문제를 겪고 있었다. HTTPS를 통해 제공되는 내 사이트에서 페이지를 가져 왔지만 컬링은 동일한 "SSL 인증서 문제"메시지를 표시했다. 나는 -k 플래그를 호출에 추가하여 불안전 한 연결을 허용함으로써이 문제를 해결했습니다.

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

편집 : 나는 문제의 뿌리를 발견했다. SSL 인증서 (StartSSL에서 사용했지만 그다지 중요하지 않다고 생각합니다.)와 중간 인증서를 올바르게 설정하지 않았습니다. 위의 user1270392와 동일한 문제가있는 경우 curl -k 수정 사항을 적용하기 전에 SSL 인증서 를 테스트하고 문제를 해결하는 것이 좋습니다.

120
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
32
Antonio Feitosa

컬이 더 이상 CA 인증서와 함께 제공되지 않기 때문에 컬링 할 전체 인증서 체인을 제공해야합니다. cacert 옵션은 하나의 파일 만 사용할 수 있기 때문에 전체 체인 정보를 하나의 파일로 연결해야합니다

인증서 체인 (예 : 브라우저에서)을 DER로 인코딩 된 바이너리 x.509 (.cer)로 복사합니다. 각 인증서에 대해이 작업을 수행하십시오.

Certs를 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

25
Somaiah Kumbera

--cacert를 사용하여 .crt 파일을 지정하십시오. ca-root-nss.crt 예를 들면.

15
ano

나는 실제로 이러한 종류의 문제를 겪었고 다음 단계를 통해 문제를 해결했습니다.

  1. 여기에서 루트 CA 인증서 묶음을 얻으십시오 : https://curl.haxx.se/ca/cacert.pem 그리고 로컬에 저장하십시오

  2. php.ini 파일 찾기

  3. curl.cainfo를 인증서의 경로로 설정하십시오. 이렇게 그것은 좋아할 것입니다 :

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

7
geckob

모질라 CA 인증서 를 다운로드하고 변환하라는 지시 사항에 따라 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
2
lmiguelmh

debian6에서 기존 시스템의 기본 CA 파일을 사용할 수 있었는지 문제가있었습니다.

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

루트로서 다음과 같이 할 수 있습니다 :

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

필자는 자동 http-> https 리디렉션이있는 웹 사이트를 테스트하려고했습니다. 나는 몇몇 certs가 이미 설치되어 있다고 생각한다. 그래서 이것은 우분투에서 작동한다. 16.04 running 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