私は最近、サーバーを8.04から10.04にアップグレードし、それに加えてすべてのソフトウェアもアップグレードしました。
オンラインで見つけたところによると、CURLの新しいバージョンにはCAバンドルが含まれていないようで、その結果、接続しているサーバーの証明書が有効な機関によって署名されていることを確認できません。
実際のエラーは次のとおりです。
CURLエラー:SSL証明書の問題です。CA証明書に問題がないことを確認してください。
私が見つけたいくつかの場所は、CURLを呼び出すときにオプションを設定してCAファイルを手動で指定するか、チェックを完全に無効にすることを提案していますが、各アプリケーションのCURL呼び出しを変更する必要はなく、むしろ問題をグローバルに修正したいです。
CURLのCAの問題をサーバー全体で修正して、既存のすべてのアプリケーションコードを変更せずにそのまま機能させる方法はありますか?
私は同じ問題を抱えており、少し調べてみたところ、curl devサイトから直接、ubuntu上のcurl対応のCA証明書のパッケージをダウンロードできることがわかりました。
cd /etc/ssl/certs
Sudo wget http://curl.haxx.se/ca/cacert.pem
Curlが最新のバンドルを使用するようになったので、準備完了です。
コマンドラインからbuntu 12.04 curlを実行して同様の問題があり、githubにあったawsコマンドラインツールを取得しました。そのようにコマンドラインを実行したかどうかを確認しました:
curl https://raw.github.com/timkay/aws/master/aws -o aws --cacert /etc/ssl/certs/ca-certificates.crt
それはうまくいくでしょう。しかし、「cacert」引数を回避できるようにCURL_CA_BUNDLE環境変数を設定しようとしても機能しません。最終的にCA証明書を更新することで問題が解決したようです。
Sudo update-ca-certificates
補足として、ある時点で、問題を解決しなかったが関連している可能性があるcurl.haxx.seからca-certsを更新しました。 (Sudo wget http://curl.haxx.se/ca/cacert.pem
から実行 /etc/ssl/certs
)。
通常、固有の実装がなく、OpenSSLに対してコンパイルされたソフトウェアは、/usr/share/ssl/certs
にあることが多いシステム全体のca-bundle.crtを参照します。
Ubuntuでは場所が異なる場合がありますが、OpenSSLパッケージにはca-bundleファイルが含まれている必要があります。
CURLには、証明書の検証方法を指定するさまざまなオプションがあります。
CURL_CA_BUNDLE
環境変数。--capath
では、CA証明書が配置されているディレクトリを指定できます。 (CURL_CA_BUNDLE
をオーバーライドします)--cacert
では、CA証明書ファイルを指定できます。CentOSサーバーで次のコマンドを実行して、CURLが使用するca-bundleパスを特定できます。
$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt