[curl] curl : (60) SSL 인증서 문제 : 로컬 발급자 인증서를 가져올 수 없습니다

root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* About to connect() to {abc} port 21 (#0)
*   Trying {abc}...
* Connected to {abc} ({abc}) port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-This is the UNLICENSED Home Edition and may be used for home, personal use only
< 220-Welcome to Cerberus FTP Server
< 220 Created by Cerberus, LLC
> AUTH SSL
< 234 Authentication method accepted
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* 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: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.



답변

‘SSL 인증서 문제 : 로컬 발급자 인증서를 가져올 수 없습니다’오류와 관련이 있습니다. 이는 요청을받는 서버가 아니라 CURL 요청을 보내는 시스템에 적용됩니다.

  1. https://curl.haxx.se/ca/cacert.pem 에서 최신 cacert.pem을 다운로드 하십시오.

  2. php.ini에 다음 줄을 추가하십시오 : (이것이 공유 호스팅이고 php.ini에 액세스 할 수 없다면 public_html의 .user.ini에 추가 할 수 있습니다).

    curl.cainfo="/path/to/downloaded/cacert.pem"

    경로를 큰 따옴표로 묶어야합니다 !!!

  3. 기본적으로 FastCGI 프로세스는 300 초마다 새 파일을 구문 분석합니다 (필요한 경우 https://ss88.uk/blog/fast-cgi-and-user-ini-에서 제안한대로 몇 개의 파일을 추가하여 빈도를 변경할 수 있음) files-the-new-htaccess / ).


답변

cURL이 서버에서 제공 한 인증서를 확인할 수 없으므로 실패합니다.

이 작업을 수행하는 데는 두 가지 옵션이 있습니다.

  1. -kcurl이 안전하지 않은 연결을 할 수 있도록하는 cURL 옵션을 사용하십시오 . 즉 cURL은 인증서를 확인하지 않습니다.

  2. 루트 CA (서버 인증서를 서명하는 CA)를 다음에 추가하십시오. /etc/ssl/certs/ca-certificates.crt

보안 FTP 서버에 연결하려면 옵션 2를 사용해야합니다.


답변

cURL 스크립트에 한 줄 코드를 추가 하여이 문제를 해결했습니다.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

경고 : 요청이 절대적으로 안전하지 않습니다 (@YSU의 답변 참조)!


답변

필자의 경우 cURL을 사용하려고하는 서비스에 인증서를 설치하는 데 문제가있는 것으로 나타났습니다. 중간 및 루트 인증서를 내 도메인 인증서에 번들 / 연결하지 못했습니다 . Chrome에서 중간 및 루트 인증서를 남기지 않고 문제를 해결하고 인증서를 수락했기 때문에 처음에는 이것이 문제라는 것이 분명하지 않았습니다.

인증서를 묶은 후 모든 것이 예상대로 작동했습니다. 나는 이렇게 묶었 다

$ cat intermediate.crt >> domain.crt

그리고 모든 중간 인증서와 루트 인증서에 대해 반복합니다.


답변

나를 위해 간단한 인증서 설치가 도움이되었습니다.

sudo apt-get install ca-certificates


답변

Git Extensions v3.48을 설치 한 후이 문제가 발생했습니다. mysysgit을 다시 설치하려고 시도했지만 동일한 문제가 발생했습니다. 마지막으로 다음을 사용하여 SSL 보안을 비활성화하십시오 (보안 관련 사항을 고려하십시오!).

git config --global http.sslVerify false

그러나 도메인 인증서가 있으면 (Win7)에 추가하는 것이 좋습니다.

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt


답변

최근에이 오류가 발생했습니다. 루트 저장소 인증서가 CA 저장소 디렉터리에 제대로 설치되지 않았기 때문입니다. CA 디렉토리를 직접 지정하는 curl 명령을 사용하고있었습니다. curl : (60) SSL 인증서 문제 : 로컬 발급자 인증서를 가져올 수 없을curl --cacert /etc/test/server.pem --capath /etc/test ... 때마다이 명령이 실패했습니다 .

strace curl ...curl을 사용한 후 curl은 openssl 해시 명명 대류를 기반으로 이름이 60ff2731.0 인 루트 인증서 파일을 찾고 있음을 확인했습니다. 따라서 루트 인증서를 올바르게 가져 오는이 명령을 찾았습니다.

ln -s rootcert.pem`openssl x509 -hash -noout -in rootcert.pem`.0

소프트 링크를 만듭니다

60ff2731.0-> rootcert.pem

curl에서 커버 아래에서 server.pem cert를 읽고 루트 인증서 파일 (rootcert.pem)의 이름을 판별하여 해시 이름으로 변환 한 다음 OS 파일 검색을 수행했지만 찾을 수 없었습니다.

따라서 테이크 아웃은 컬 오류가 모호 할 때 컬을 실행할 때 strace를 사용하고 (대단한 도움이 됨) openssl 명명 규칙을 사용하여 루트 인증서를 올바르게 설치하십시오.