古いサーバーのcurlで「(60) Peer certificate cannot be authenticated with known CA certificates」エラー

古いCentOS 6でCurlでURIにアクセスすると、下記のようなエラーになります

$ curl -I https://example.com/
curl: (60) Peer certificate cannot be authenticated with known CA certificates
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.

CentOS 7系のだとエラーは出ません、エラーの出ているサーバーのOSはCentOS 6.5系です

サーバーが古いのでOpenSSLでバンドルしているCA証明書・root証明書が最新の証明書を含んでいない可能性があるのでエラーとなりますので、新しい証明書と差し替えます

1.新しいroot証明書をダウンロードします、古いサーバーで証明書の検証でエラーなるので「–no-check-certificate」で証明書の検証を行わないようにしています

$  wget http://curl.haxx.se/ca/cacert.pem
--2024-01-31 10:24:37--  https://curl.haxx.se/ca/cacert.pem
Connecting to curl.haxx.se|151.101.90.49|:443... connected.
ERROR: certificate common name “c.sni-561-default.ssl.fastly.net” doesn’t match requested host name “curl.haxx.se”.
To connect to curl.haxx.se insecurely, use ‘--no-check-certificate’.

# サーバーが証明書の検証をエラーとなるので、証明書の検証をおこなわずにダウンロード
$ wget --no-check-certificate http://curl.haxx.se/ca/cacert.pem

2.既存の証明書をバックアップする

$ sudo cp /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-bundle_crt.bak

3.新しい証明書と古い証明書を差し替え

$ sudo cp -p cacert.pem /etc/pki/tls/certs/ca-bundle.crt

これでCurlでエラーはなくなりました

$ curl -I example.com
HTTP/1.1 200 OK
Date: Wed, 31 Jan 2024 01:26:45 GMT
Server: Apache
Last-Modified: Wed, 01 Apr 2009 10:06:52 GMT

 

 

 

LinuxCentOS 6

Posted by admin