Macでいい感じのcurlを使いたい

2 min読了の目安(約1200字TECH技術記事
brew install curl-openssl

以下解説。

Macにプリインストールされているcurl

Macにはデフォルトでcurlがインストールされています。バージョンも比較的新しいものがインストールされていますし、基本的にはプリインストールされているcurlで困ることはないと思います。

しかし例えばTLSv1.3を使いたいと思った場合、TLSv1.3に対応しているOpenSSLを使ってコンパイルされたcurlである必要があります。MacにプリインストールされているcurlではLibreSSLが使われていますが、LibreSSLのTLSv1.3のクライアント側の対応が入ったのは割と最近で、2020/09/27現在のプリインストールされているcurlではTLSv1.3を利用できません。

またcurlのHTTP/2対応はnghttp2を使用しているので、nghttp2と一緒にコンパイルする必要があります。プリインストールされているcurlは考慮されているのでHTTP/2を使用することができますが、標準では対応していないことに注意が必要です。

brew install curlはおすすめできない

Mac上でソフトウェアをコンパイルする場合はHomebrewを使った方が圧倒的に簡単なので使用している人が多いと思います。そのときに brew install curl をしてはいけません。こちらは昔はいい感じのオプションを指定できた記憶があるのですが、現在ではオプションをほとんど渡せません。nghttp2への依存を追加する方法がないためHTTP/2を有効にできません。

brew install curl-opensslを使用すればHTTP/2を有効にしつつ、新しいOpenSSLと一緒にコンパイルできるのでTLSv1.3を使用することができます。

TLSに関する注意

注意なのですが、昔のcurlと現在のcurlでは一部非互換な変更があったので注意してください。以前は--tlsv1.1とオプションを渡せばUse TLSv1.1という挙動でしたが、新しめのバージョンだとUse TLSv1.1 or greaterという挙動に変わりました。使う前に必ず--helpを見てどの挙動のバージョンか確認してください。個人的にはこの変更はかなりひどい変更だと思います。本来この挙動にするならオプション名は--tls-min 1.1というオプションにすべきでしょう。しかしそんなオプションはありません。

ではTLSv1.1で通信したい場合はどうすればいいのでしょうか? 全く同じではないですが、--tls-maxというオプションが現在では追加されています(--helpで確認してください)。--tls-max 1.1というオプションを渡せば最大でTLSv1.1までしか使わなくなります。

以上のことを理解していればcurlを使ってミドルウェアの挙動を色々確認することができると思います。