web-dev-qa-db-ja.com

HTTPS URLにアクセスしようとしているときにcURLを使用して証明書を処理するにはどうすればよいですか?

Curlを使用して次のエラーが表示されます。

 curl:(77)証明書検証場所の設定エラー:
 CAfile:/etc/ssl/certs/ca-certificates.crt
 CApath:none 

この証明書検証場所を設定するにはどうすればよいですか?ありがとう。

164
moorecats

このエラーは、パッケージの欠落に関連していますca-certificates。それをインストールします。

Ubuntu Linux(および同様のディストリビューション):

# apt-get install ca-certificates

CygWinで Apt-Cyg

# apt-cyg install ca-certificates

Arch Linux(Raspberry Pi)で

# pacman -S ca-certificates

ドキュメントは伝えます:

このパッケージには、SSLベースのアプリケーションがSSL接続の信頼性を確認できるようにするCA証明書のPEMファイルが含まれています。

Debian-squeezeのca-certificatesパッケージの詳細

64
Rubens Mariuzzo

また、CA証明書の最新バージョンをインストールしましたが、まだエラーが発生していました。

curl: (77) error setting certificate verify locations:
  CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none

問題は、curlは証明書がパス/etc/pki/tls/certs/ca-bundle.crtにあることを期待していましたが、パス/etc/ssl/certs/ca-certificates.crtにあるために見つからなかったことです。

実行して証明書を予想される宛先にコピーする

Sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

私のために働いた。実行して存在しない場合は、ターゲット宛先のフォルダーを作成する必要があります

Sudo mkdir -p /etc/pki/tls/certs

必要に応じて、上記のコマンドを変更して、宛先ファイル名をcurlが予期するパスに一致させます。つまり、エラーメッセージで/etc/pki/tls/certs/ca-bundle.crtを「CAfile:」に続くパスに置き換えます。

142
Scott Emmons

これを.bashrcに入れてください

# fix CURL certificates path
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

(ロバートからのコメントを参照)

78

次の内容のファイル~/.curlrcを作成します

cacert=/etc/ssl/certs/ca-certificates.crt
28
prabeesh

エラーを回避する最も簡単な方法は、curlリクエストのどこかに-kオプションを追加することです。そのオプションは、「証明書なしでSSLサイトへの接続を許可します。」 (curl --helpから)

これは、信頼できるCAによって署名されていない証明書を提示しているため、自分が考えているエンドポイントと通信していないことを意味する場合があることに注意してください。

例えば:

$ curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg

私に次のエラー応答を与えました:

curl: (77) error setting certificate verify locations:
  CAfile: /usr/ssl/certs/ca-bundle.crt
  CApath: none

-kに追加しました:

curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k

エラーメッセージはありません。おまけとして、apt-cygをインストールしました。そしてCA証明書。

18
10gistic

@roensは正しいです。これはすべてのAnacondaユーザーに影響し、以下のエラーが発生します
curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none

回避策は、デフォルトのシステムcurlとavoidを使用して、先頭に追加されたAnaconda PATH変数をいじることです。あなたはどちらか

  1. Anaconda curlバイナリの名前を変更します:)
    mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda

  2. またはAnaconda curlを削除
    conda remove curl

$ which curl /usr/bin/curl

[0]Anaconda Ubuntu curl Github issuehttps://github.com/conda/conda-recipes/issues/352

12

$ man curlから:

--cert-type <type>
    (SSL) Tells curl what certificate type the provided  certificate
    is in. PEM, DER and ENG are recognized types.  If not specified,
    PEM is assumed.

    If this option is used several times, the last one will be used.

--cacert <CA certificate>
    (SSL) Tells curl to use the specified certificate file to verify
    the peer. The file may contain  multiple  CA  certificates.  The
    certificate(s)  must be in PEM format. Normally curl is built to
    use a default file for this, so this option is typically used to
    alter that default file.
11

この問題を修正する別の方法は、証明書の検証を無効にすることです。

echo insecure >> ~/.curlrc
6
Pablo R. Mier

これは私のために働いた

Sudo apt-get install ca-certificates

次に、証明書フォルダに移動します

Sudo cd /etc/ssl/certs

次に、ca-certificates.crtファイルを/etc/pki/tls/certsにコピーします

Sudo cp ca-certificates.crt /etc/pki/tls/certs

tls/certsフォルダーがない場合:作成し、chmod 777 -R folderNAMEを使用して権限を変更します

5
Kwame Yeboah

WindowsのXAMPPで実行されているPHPコードの場合、php.iniを編集して以下を含める必要があることがわかりました

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = curl-ca-bundle.crt

そして、ファイルにコピーします https://curl.haxx.se/ca/cacert.pem そして、名前をcurl-ca-bundle.crtに変更し、\ xamppパスの下に配置します(できませんでしたcurl.capathを機能させる)。また、cURLサイトのCAbundleは、接続しているリモートサイトには不十分であることがわかったため、 http:// winamppluginsでcurl 7.47.1のプリコンパイル済みWindowsバージョンと共にリストされているものを使用しました.co.uk/curl /

5
LJT

カールがCA証明書などの存在しないファイルを指しているようです。

Curlを使用したCA証明書の主なリファレンスについては、 https://curl.haxx.se/docs/sslcerts.html を参照してください。

4
Daniel Stenberg

curlは、Certificate Authority (CA)公開鍵(CA証明書)の「バンドル」を使用して、デフォルトでSSL証明書の検証を実行します。デフォルトのバンドルはcurl-ca-bundle.crtという名前です。 --cacertオプションを使用して代替ファイルを指定できます。

このHTTPSサーバーがバンドルで表されるCAによって署名された証明書を使用する場合、証明書の問題が原因で証明書の検証が失敗した可能性があります(有効期限が切れているか、名前がURLのドメイン名と一致しない可能性があります)。

Curlによる証明書の検証を無効にする場合は、-k(または--insecure)オプションを使用します。

例えば

curl --insecure http://........
4
meda

システムにないフォルダを作成するだけです。

/ etc/pki/tls/certs /

次のコマンドを使用してファイルを作成します。

Sudo apt-get install ca-certificates

次に、証明書をコピーして、エラーに表示されている宛先フォルダーに貼り付けます。私のものは「with message 'error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none' in」で、エラーに記載されている正確な場所にファイルを貼り付けてください。次のコマンドを使用して、貼り付けをコピーします。

Sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

一定。

2
Manu R S

価値があるものとして、which curlが実行されていることを確認することも重要です。

私が管理している共有マシンのユーザーがこのエラーを受け取っていました。しかし、原因はAnacondaをインストールしたためであることが判明しました( http://continuum.io )。そうすると、標準の$PATHの前にAnacondaのバイナリパスが置かれ、独自のcurlバイナリが付属します。このバイナリには、このUbuntuマシンにインストールされたwereのデフォルト証明書が見つかりません。

2
roens

私はまったく同じ問題を抱えていました。結局のところ、私の/etc/ssl/certs/ca-certificates.crtファイルは不正な形式でした。最後のエントリは次のようなものを示しました。

-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIJAN..lots of certificate text....AwIBAgIJAN-----END CERTIFICATE-----

-----END CERTIFICATE-----の前に改行を追加した後、curlは証明書ファイルを処理できました。

update-ca-certificatesコマンドは警告を出さなかったので、これを見つけるのは非常に面倒でした。

これは、curlのバージョン固有の問題である場合とそうでない場合があるため、完全を期すために、ここに私のバージョンを示します。

curl --version
# curl 7.51.0 (x86_64-Alpine-linux-musl) libcurl/7.51.0 OpenSSL/1.0.2j zlib/1.2.8 libssh2/1.7.0
# Protocols: dict file ftp ftps Gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp 
# Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 
2
ShrimpPhaser

MacOSでhomebrewを使用している場合、またはlinuxでlinuxbrewを使用している場合は、 このページ から次の手順でopensslおよびcurlを再インストールしてください。

このエラーメッセージは、curlがopensslを使用して安全な接続を確立できないことを示しています。 opensslを再インストールすると問題が解決するはずです。 curlとgitの両方で安全でない接続を一時的に使用して必要なファイルをダウンロードするには、次を実行します。

echo insecure >> ~/.curlrc
git config --global http.sslVerify false

次に、opensslおよびcurlをインストールまたは再インストールします。

HOMEBREW_CURLRC=1 brew reinstall openssl curl

最後に、セキュリティの変更を取り消して、curlとgitが安全な接続を再び使用するようにします。

sed -i '/^insecure$/d' ~/.curlrc
git config --global http.sslVerify true

結果を確認するには、新しいシェルセッションを開始する必要がある場合があります

curl -v https://github.com # or any other https urls.

出力に次の出力が表示される場合は、問題を解決する必要があります!

* successfully set certificate verify locations:
*   CAfile: /usr/local/etc/openssl/cert.pem
    CApath: /usr/local/etc/openssl/certs

参照:

1
Itachi

私のためにうまくいくgit bashで次のコマンドを実行します

git config --global http.sslverify "false"
1
J4cK

これは私のために修正されました:

curl --remote-name --time-cond cacert.pem \
    https://curl.haxx.se/ca/cacert.pem
0
Reza Farshi

この問題が発生し、私のバージョンのCURLはDERエンコードされた証明書を解析できませんでした(そして--cert-typeオプションにも注意を払っていませんでした)。証明書をPEM形式に変換すると、機能しました。

0
Joshua Davies

この修正は簡単で安全な修正であることがわかりました。 php.iniファイル内の2つの値のパスを変更するだけです。こちらの手順に従ってください: https://ourcodeworld.com/articles/read/196/xampp-wampp-php-ssl-certificate-error-unable-to-get-local-issuer-certificate

0
Will Ward

以下は、問題を修正する手順を説明しています。
1。ファイルが定義URLに存在することを確認します。
2。そうでない場合は、URLからファイルをダウンロードします。 https://curl.haxx.se/ca/cacert.pem
3。 php.iniファイルで定義されたパスにファイルをコピーしてペストします。
4。 Apacheサービスを再起動します。

0
tapas talukder

このエラーは、PKIディレクトリ内のSSLチェーン証明書ファイルが破損または欠落していることが原因です。次の手順に従って、ファイルがcaバンドルであることを確認する必要があります:コンソール/端末で:

mkdir /usr/src/ca-certificates && cd /usr/src/ca-certificates

次のサイトにアクセスしてください: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates 、ca証明書を取得します。ダウンロードのURLをコピーしてURLに貼り付けます:wget your_url_donwload_ca-ceritificated.rpm now、install yout rpm:

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

今、あなたのサービスを再起動します:私の例このコマンド:

Sudo service2 httpd restart
0