“Could not handshake: An unexpected TLS packet was received” というエラーは apt.conf の罠にはめられた証拠だw

Linuxマシンをセットアップする際に欠かせない apt コマンド.
今まで何度かその設定ファイルである /etc/apt/apt.conf の罠にはめられた話です.

proxy 経由で apt コマンド実行した際のエラー

多くの会社がそうであるように, 社外への通信は proxy を経由することが多いかと.

わが社も外部に通信する際は proxy を経由して Internet を経由します.

proxy を経由して apt コマンドを利用するように以下の様に /etc/apt/apt.conf を書きます.

proxy.hogehoge.co.jp は社内の proxy の URL だと思ってください.

Acquire::ftp::proxy "ftp://proxy.hogehoge.co.jp:8080/";
Acquire::http::proxy "http://proxy.hogehoge.co.jp:8080/";
Acquire::https::proxy "https://proxy.hogehoge.co.jp:8080/";

これで apt コマンドでパッケージをインストールしてみると,

 Could not handshake: An unexpected TLS packet was received. [IP: xxx.xxx.xxx.xxx 8080]

xx.xx.xxx.xxx は Proxy の IP アドレスだと思ってください.

おや?このエラーは…ううむ、かつてこんな現象を見たことあるなぁ…

…と古い記憶をたどります.

apt.conf の罠

もう一回 apt.conf を確認してみます.

Acquire::ftp::proxy "ftp://proxy.hogehoge.co.jp:8080/";
Acquire::http::proxy "http://proxy.hogehoge.co.jp:8080/";
Acquire::https::proxy "https://proxy.hogehoge.co.jp:8080/";

3行目の Acquire::https::proxy の行に注目, この記述に原因がありました.

正しくは以下の通り

Acquire::ftp::proxy "ftp://proxy.hogehoge.co.jp:8080/";
Acquire::http::proxy "http://proxy.hogehoge.co.jp:8080/";
Acquire::https::proxy "http://proxy.hogehoge.co.jp:8080/";

Acquire::https::proxy であっても proxy のURLは https:// ではなく, http:// が正しいんです.

今回も apt.conf の罠にひっかかりました…

良くやらかしそうな間違いではありますが、意外なほど書いてる人少なくて…

そんな意味でこの記事を書きました.

お役に立てれば幸いです

では