작은숲:위키노트/CURL 60 오류 코드
cURL로 HTTPS 접속을 할 때 아래와 비슷한 오류가 나와 놀라게 하는 경우가 있다.
cURL error: [60] Peer certificate cannot be authenticated with known CA certificates
접속하고자 하는 서버가 공인된 CA에서 인증 받지 않은 인증서를 쓰고 있다는 말인데, 그다지 좋은 방법은 아니지만 공인된 CA 인증 절차를 건너뛰게 해서 이 오류를 피할 수 있다. 만약 PHP 스크립트라면 아래 내용을 추가한다.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Git을 사용하던 중 이런 오류를 만나면 아래 전역 설정을 해준다.
$ git config --global http.sslVerify false
CA 번들 업데이트
공인된 CA에서 인증 받은 인증서를 쓰고 있음에도 불구하고 이런 오류가 나온다는 것은 cURL에서 사용하는 시스템 기본 CA 번들에 해당 CA의 정보가 빠져있다는 말이다. 따라서 가장 좋은 방법은 이 시스템의 CA 번들 정보를 최신 정보로 업데이트 하는 것이다. 레드햇 계열의 리눅스에서는 ca-certificates 패키지를 제공하므로 이 패키지가 설치되어 있지 않다면 설치하도록 한다. 그리고 공유 시스템 인증서(shared system certificates)를 사용하도록 설정한다.
# yum -y install ca-certificates
...
# update-ca-trust enable
나중에 여기에 추가할 CA 인증서가 있다면 해당 CRT 파일을 /etc/pki/ca-trust/source/anchors 디렉토리에 복사해놓고 update-ca-trust extract 명령으로 시스템에 공인된 CA 인증서로 추가한다.
# cp ca.crt /etc/pki/ca-trust/source/anchors/
# update-ca-trust extract
시스템 CA 번들 변경
대부분의 리눅스 시스템에서는 기본 CA 번들이 /etc/pki/tls/certs/ca-bundle.crt 파일이다. 이 파일을 최신 CA 번들로 바꿔서 적용하는 방법도 있다. 최신 CA 번들은 https://curl.haxx.se/ca 에 가면 구할 수 있다. 여기서 제공하는 CA 번들은 파이어폭스 소스 파일에서 추출한 것으로 레드햇의 ca-certificates 패키지에서도 이것을 쓴다고 한다.
# cp /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-bundle.crt-dist
# curl https://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 246k 100 246k 0 0 33126 0 0:00:07 0:00:07 --:--:-- 158k
update-ca-trust를 사용한다면 아래와 같이 할 수 있다.
# curl https://curl.haxx.se/ca/cacert.pem -o /usr/share/pki/ca-trust-source/anchors/cacert.pem
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 246k 100 246k 0 0 92827 0 0:00:02 0:00:02 --:--:-- 151k
# update-ca-trust extract
참고
- (영어) Getting an error "curl: (60) Peer certificate cannot be authenticated with known CA certificates" when trying to curl a site that has a VALID SSL certificate
- (영어) PHP: curl_setopt
- (영어) Adding trusted root certificates to the server
- (영어) cURL - Extract CA Certs from Mozilla
- (영어) How to update cURL CA bundle on RedHat?
- (영어) How to securely acquire the Mozilla root certificate bundle for use with curl, Net::HTTP, etc.
- (영어) Solution : Curl webservice CURLE_SSL_CACERT (60) Peer certificate cannot be authenticated with known CA certificates
| PHP 7.0 | |
|---|---|
| PHP 5.6 | |
| PHP 5.5 | |
| 확장 기능 | |
| 활용 | |
| 소프트웨어 | |