質問: curlでHTTPS通信を行おうとしています。 ``` curl -X POST -d "data=1234" https://URL --cacert YYY.pem --capath C:XXX\ ``` 上記のようにcurlコマンドを実行すると、以下のエラーが出てしまいます。 ``` curl: (77) error setting certificate verify locations: CAfile: YYY.pem CApath: C:XXX\ ``` ルート証明書はC:XXX\YYY.pemを使用します。 ルート証明書を指定するにはcurlのオプションが間違っているのでしょうか?
回答: `--cacert`と`--capath`は両方を指定する物ではなく、ルート証明書の保存のされ方によって、どちらか片方を指定する物です。今回は`-cacert C:\XXX\YYY.pem`とすることで、うまく動くと思います。 --cacertは複数の証明書が記述されている**一つの**証明書ファイル(PEM形式)を指定する方法です。フルパスまたは**カレントディレクトリからの**相対パスで指定する必要があります。**指定したファイル名の証明書ファイルを探しに行くという事はありません**。 --capathは一つの証明書がそれぞれ記述されている**複数の**証明書ファイル(PEM形式)が置いてあるディレクトリを指定する方法です。ただし、証明書をただ置けば動くというわけではなく、**証明書のハッシュに基づいたファイル名にする必要があります**(OpenSSLにに含まれる`c_rehash`ユーティリティーで簡単に作成できます)。