hack のためのネタ帳, etc,,,

状況

Ubuntu 18.04.4 LTS では davfs2 で mount 出来てた WebDav が 20.04 LTS では libssl が脆弱な protocol や cipher を切ったため mount できなくなったので、どうにかできんものかと言う流れから、
環境変数 OPENSSL_CONF いじってみたが駄目だったので、
docker に ubuntu:18.04 構築して davfs2 で mount を親環境に見せようと企んでたのだが、親環境に見せるには NFS だか smb だかで container 内のツリーを共有してやらないといけないので面倒だなと。
ふと LD_LIBRARY_PATH に古い libssl.so.1.1 食わせとけばどうにかなるんじゃね?と気付いた。

具体的には
$ # Ubuntu 20.04 LTS
$ wget -O/dev/null https://${HOST}/
--2020-06-19 16:26:27--  https://${HOST}/
${HOST} (${HOST}) をDNSに問いあわせています... xxx.xxx.xxx.xxx
${HOST} (${HOST})|xxx.xxx.xxx.xxx|:443 に接続 しています... 接続しました。
OpenSSL: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol
SSL による接続が確立できません。
$ # Ubuntu 18.04.4 LTS
$ wget -O/dev/null https://${HOST}/
--2020-06-19 16:27:28--  https://${HOST}/
${HOST} (${HOST}) をDNSに問いあわせています... xxx.xxx.xxx.xxx
${HOST} (${HOST})|xxx.xxx.xxx.xxx|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 243 [text/html]
`/dev/null' に保存中

/dev/null           100%[===================>]     243  --.-KB/s    時間 0s    

2020-06-19 16:27:28 (27.3 MB/s) - `/dev/null' へ保存完了 [243/243]
のような状況なのだが、
$ # Ubuntu 20.04 LTS
$ ldd /usr/bin/wget|grep libssl
        libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f5979b4a000)
$ ldd /sbin/mount.davfs|grep libssl
        libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f1d172d5000)
$ # Ubuntu 18.04.4 LTS
$ ldd /usr/bin/wget|grep libssl
	libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f9cdc471000)
$ ldd /sbin/mount.davfs|grep libssl
	libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f1d73828000)
のように Ubuntu 20.04 LTS も 18.04.4 LTS も libssl.so.1.1 なので、ここだけ差し替えれば動くんじゃね?と。

それぞれのバージョンは
$ # Ubuntu 20.04 LTS
$ apt-cache show libssl1.1|grep Version
Version: 1.1.1f-1ubuntu2
$ dpkg -l|grep libssl1.1|sed -E 's/  +/\t/g'
ii      libssl1.1:amd64 1.1.1f-1ubuntu2 amd64   Secure Sockets Layer toolkit - shared libraries
$ # Ubuntu 18.04.4 LTS
$ apt-cache show libssl1.1|grep Version
Version: 1.1.1-1ubuntu2.1~18.04.6
Version: 1.1.0g-2ubuntu4
$ dpkg -l|grep libssl1.1|sed -E 's/  +/\t/g'
ii	libssl1.1:amd64	1.1.1-1ubuntu2.1~18.04.6	amd64	Secure Sockets Layer toolkit - shared libraries

Ubuntu 18.04.4 LTS こと bionic の libssl1.1 については以下

設定

まず
# Ubuntu 20.04 LTS
mkdir -p /tmp/libssl
cd /tmp/libssl
wget https://mirrors.evowise.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1-1ubuntu2.1~18.04.6_amd64.deb
dpkg -x libssl1.1_1.1.1-1ubuntu2.1~18.04.6_amd64.deb libssl1.1
ln -sv libssl1.1/usr/lib/x86_64-linux-gnu/libssl.so.1.1 ./
として 18.04.4 LTS の libssl1.1 を展開する。
MitM を懸念する場合、hash のチェックもしておく。

これを LD_LIBRARY_PATH に食わせると
$ # Ubuntu 20.04 LTS
$ LD_LIBRARY_PATH=/tmp/libssl wget -O/dev/null https://${HOST}/
--2020-06-19 16:42:49--  https://${HOST}/
${HOST} (${HOST}) をDNSに問いあわせています... xxx.xxx.xxx.xxx
${HOST} (${HOST})|xxx.xxx.xxx.xxx|:443 に接続 しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 243 [text/html]
`/dev/null' に保存中

/dev/null           100%[===================>]     243  --.-KB/s    時間 0s    

2020-06-19 16:42:50 (8.85 MB/s) - `/dev/null' へ保存完了 [243/243]
となった。

あとは、
sudo LD_LIBRARY_PATH=/tmp/libssl mount.davfs https://${HOST}/${DIR} ${MOUNTPOINT}
で無事 mount できたので、
/tmp/libssl を適当な永続フォルダに移して終了。

とりあえず今回はこれでお茶を濁すとして、
バージョン上がって libssl が 1.1 より新しいバージョンになると再度トラブること確定何だけど、
snap とかで固定できんかな?

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

編集にはIDが必要です