質問: Cygwinでcurlを実行して、httpsのアクセスをしようと考えています。 curlのバージョンは7.52.1 です。 アクセスしようとした先は https://localhost/hogehoge です。 以下のように実行しています。 ``` $ curl https://localhost/hogehoge ``` 以下のようなエラーが表示されます。 > > curl: (60) SSL certificate problem: self signed certificate > > More details here: https://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. > > > こちらのサイトを参考にして curl-ca-bundle.crt を更新してみました。 http://www.turbolinux.com/support/document/knowledge/866.html /usr/share/curl/curl-ca-bundle.crt というファイルは作られ、中身もそれっぽい情報になっています。 しかし状況は改善されません。 こちらのサイトには、curlの日本語ドキュメントへのリンクがあったのですが、URLがリンク切れになっていて、正確な情報が良くわかりません。 この後どうすればhttpsでcurlが使えるのでしょうか? -kをつかれば一応通信できるのですが、どうにも気持ち悪いのです。 宜しくお願いします。
回答: -kをつけて証明書チェックを無視すれば問題ありません。 気持ち悪いと感じるのは、何のために証明書チェックが存在し、 無視することでどのような影響があるかをきちんと理解されていないからでしょう。 超簡単に説明すると、httpsで通信する際、相手先が信頼できるドメインであるかチェックします。 ``` https://localhost/hogehoge ~~~~~~~~~ ↑ドメインとはの部分です ``` 「信頼できるドメイン」とは、自身が保持している信頼された証明書リストで照合できることです。 「信頼された証明書リスト」とは、今回の場合 /usr/share/curl/curl-ca-bundle.crt です。 よって、curl-ca-bundle.crt に localhostは信頼された相手先。と 書かれていなければエラーが出ることになります。 当然、一般公開されている証明書リストに localhostは信頼された相手先。 とは 書かれていませんので、実施された手順では改善されません。 回避策は、別の方も書かれているようにプライベートCAを構築して、 localhostは信頼された相手先 と書かれたリストを生成するか、 証明書チェックを無視するかの2択になります。 やりたいことは恐らく単純にWebページにアクセスすることだと思いますので、 証明書チェックを無視するべきでしょう。