production.log

ピクスタ株式会社でエンジニアのマネージャーをやっている星直史のブログです。

homebrewでinstlalしたOpenSSLが反映されず、OSX標準のOpenSSLが使用されてしまう場合の対処方法

概要

OSX標準のOpenSSLが古く、tls1.2で通信できず、curlが失敗する事案が発生してしまいました。 対処方法を調べても、

`brew update
brew upgrade openssl
brew link openssl --force

で治りました^^

という記事が多かったのですが、上記の対応でもopenssl versionが古いままだったので、その対処方法を書きます。

手順

手順は下記の通りです。 - homebrewで最新のOpenSSLをinstallし、リンクを張る - OpenSSLのパスを確認 - 環境変数の設定

homebrewで最新のOpenSSLをinstall

この記事にたどり着いた人は、既に実行済みかつ、5,000万回は同じことを見ていると思いますが、 念のため記載しておきます。

$ which openssl #opensslのパスを確認 /usr/bin/openssl となってるはず
$ openssl version #バージョンの確認
$ brew update #brewのアップデート
$ brew list #opensslがインストールされているか確認
$ brew info openssl #最新版の情報取得
$ brew upgrade openssl #アップグレード
$ brew link openssl

OpenSSLのパスを確認

だいたいの記事では、これで治りました報告が多かったのですが、自分の場合は、 この時点でopenssl versionをやっても古いままでした。

今一度、パスを確認してみると

$ openssl version
OpenSSL 0.9.8zg 14 July 2015

$ which openssl
/usr/bin/openssl

$ brew info openssl
openssl: stable 1.0.2j (bottled) [keg-only]
ずらずら〜〜
/usr/local/Cellar/openssl/1.0.2j (1,695 files, 12M)

OSX 標準のOpenSSLのパスが/usr/bin/opensslだったのに対して homebrewでinstallしたOpenSSLが/usr/local/Cellar/openssl/1.0.2jなのが分かります。

環境変数の設定

これまでの結果から、読み込まれる順番が問題なのではないか?と推測し、 $PATHの設定を疑いました。

$ echo "export PATH=/usr/local/Cellar/openssl/1.0.2j/bin:$PATH" >> ~/.bash_profile
$ source ~/.bash_profile
$ which openssl
/usr/local/Cellar/openssl/1.0.2j/bin/openssl
$ openssl version
OpenSSL 1.0.2j  26 Sep 2016

予想通りでした。 brew link opensslだけでは正常に反映されておらず、基本的なパスなどの確認を怠っていたがために小一時間ハマってしまいました。