手動でCentOS7のcurlをバージョンアップしたら証明書エラーになったので対応した
はじめに
CentOS 7を使っているのですが、curlのバージョンが古いため、 curl: option --data-raw: is unknown
なんていわれました。
というわけでcurlをバージョンアップすることにしました。
ダウンロード
公式サイトからリンクがある、GitHubのリポジトリから実行ファイルをダウンロードしました。 curl.se
RHEL7用のrpmもあったのですが、実行ファイルだけ置き換えられれば、簡単じゃん。と思っていました。 github.com
インストール
インストールは簡単です。
念のため /usr/bin/curl
をバックアップし、そこに新しいバージョンをコピーしました。
- コピー前
$ curl --version curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.53.1 zlib/1.2.7 libidn/1.28 libssh2/1.8.0 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets
- コピー後
$ curl -V curl 7.76.0 (x86_64-pc-linux-musl) libcurl/7.76.0 OpenSSL/1.1.1k zlib/1.2.11 libssh2/1.9.0 nghttp2/1.41.0 Release-Date: 2021-03-31 Protocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Features: alt-svc AsynchDNS HTTP2 HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets
使ってみたらエラーになった
まずは動作確認をするために、ブログにアクセスしたところ証明書関係のエラーになりました。
$ curl https://hanamiche.hatenablog.jp/ curl: (77) error setting certificate verify locations: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none
少し調べると同じような問題の解決方法が見つかりました。 証明書は各ディストリビューションごとに異なっています、見落としていました。 github.com
シンボリックリンクを作り対応
rpmを使うことも頭をよぎりましたが、せっかくなのでシンボリックリンクで対応することにしました。
$ sudo ln -s /etc/ssl/certs/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt
実行できた
証明書の準備が整ったところで、再度実行したら問題なく実行できました! 問題の発端である --data-raw
オプションも問題なく動作しました。
$ curl https://hanamiche.hatenablog.jp/ --data-raw 'test=1' <!DOCTYPE html> <html lang="ja" data-admin-domain="//blog.hatena.ne.jp" data-admin-origin="https://blog.hatena.ne.jp" data-author="hanamiche" data-avail-langs="ja en" data-blog="hanamiche.hatenablog.jp" data-blog-host="hanamiche.hatenablog.jp" data-blog-is-public="1" data-blog-name="F1大好きな、インチキ技術者の日記"