Posted at

Ubuntu on Docker で SSL/TLS 通信するとエラーになる問題の対処

More than 3 years have passed since last update.

Docker 用の Ubuntu イメージ は最低限のパッケージがインストールされていない。そのため、SSL/TLS 通信を行おうとすると以下のメッセージが出るだろう。 (以下は curl の場合)


curl: (60) SSL certificate problem: unable to get local issuer certificate


ここでは「その場しのぎのやり方」と「根本的な対処」と「なぜそんなことが起こりえるのか」の3つにわけて説明する。


その場しのぎのやり方

ここでは SSL/TLS 通信の使用頻度が高い代表的なプログラムの3つを取り上げて説明する。


  • git

  • curl

  • wget


git の場合

http.sslVerify を無効にする。

$ git config --global http.sslVerify false

$ git clone https://git.example.com/some/repository.git

元に戻す場合は http.sslVerifytrue にする。


curl の場合

-k をつけて実行する。

$ curl -k https://example.com


wget の場合

--no-check-certificate をつけて実行する。

$ wget --no-check-certificate https://example.com


根本的な対処

そもそも今回のエラーは CA の証明書が入っていないことが原因のエラーであり、Ubuntu イメージには CA の証明書が入ってない。

Docker イメージの構築段階、あるいはイメージ上で実行するスクリプトに

CA の証明書のパッケージをインストールすればよい。

$ apt-get install ca-certificates

これで「その場しのぎのやり方」をせずとも通常に SSL/TLS 通信が可能になる。


なぜそんなことが起こりえるのか?

通常 ca-certificates は推奨パッケージとして「その場しのぎのやり方」で取り上げたプログラムと共にインストールされる。

Recommended packages:

ca-certificates

ところが apt-get--no-install-recommends を明示的につけると ca-certificates がインストールされなくなる。そのために起こるエラーである。