FreeBSD 15.0-RELEASE で地味につまずく
ついに 15.0-RELEASE がリリースされました(リリースノート)。ベースが pkg 管理になったなど色々トピックがありますが、個人的に地味なところで色々つまづいたので、そこら辺をメモ的に残しておこうと思います。
基本的に amd64 での話です。
古い暗号の粛清
15.0-RELEASE の従来からの結構大きな違いで、「古い暗号化が粛清された」というのがあります。具体的には contribute で入っている openssh と openssl のビルドで、古い暗号化はビルドされなくなりました。
OpenSSHでは DSA が無効化されました。
https://cgit.freebsd.org/src/commit/?id=8e28d84935f2
- This release removes support for the weak DSA signature algorithm.
また、OpenSSl ではバージョン更新により、md4/rc4 などがビルドされなくなっています。
OpenSSL が md4/rc4/md5 対応してないと、net/freerdp net/freerdp3 でWindows にリモートデスクトップ接続ができなくなる
15.0-PRERELEASE に上げて pkg upgrade したら Windows にリモートデスクトップに接続できなくなって、なんで?と原因を探ると、OpenSSL のバージョンアップの問題だとわかりました。古い環境というわけではなく、Windows10/11 など最新 Windows に接続できません。
接続には net/freerdp や net/freerdp3 を使っているのですが、どうやら、アルゴリズムの奥深くで MD4/RC4/MD5 といったレガシーハッシュを使っているため、これらのハッシュが必要とのこと。
MD5 は対応が切られていませんが、MD4/RC4 がないため接続ができなくなっています。
解決策1 ports で openssl をインストールする
解決策の一つとして、ports から openssl を md4/rc4 を有効にしてインストールするというのがあります。
security/openssl35 (base と同じバージョン)で make config して、RC4 と MD4 を選んで make installします。
その後さらに net/freerdp や net/freerdp を ports としてビルドします。そうすると、configure で ports 版の openssl を見つけてそちらを使うようになります。
% ldd /usr/local/bin/xfreerdp | grep crypto
libcrypto.so.17 => /usr/local/lib/libcrypto.so.17 (0x2ebf29e00000)
という感じになっていれば、ports 版を使用するようになっています。
ただ 他の ports をビルドした場合も ports 版 openssl を使用するようになってしまうのは気持ち悪いです。
解決策2 freerdp3 の ports の変更
この問題の freerdp 側の対策として、MD4/RC4/MD5 に関しては freerdp 側で用意したソースをビルドする WITH_INTERNAL_MD4/WITH_INTERNAL_RC4/WITH_INTERNAL_MD5 という cmake オプションが用意されています。ただし、freerdp の 3.x系のみなので net/freerdp3 しか対応できません。
net/freerdp3 の ports がこのオプションに対応していれば良かったのですが、現状そうはなっていません。なので現状では自前で ports を変更しないとこのオプションを使う解決策は実現できません。
net/freerdp3/Makefile の CMAKE_ON の定義に
CMAKE_ON= CHANNEL_SERIAL CHANNEL_URBDRC_CLIENT RDTK_FORCE_STATIC_BUILD \
WITH_CLIENT_SDL_VERSIONED WITH_FREERDP_DEPRECATED \
WITH_FREERDP_DEPRECATED_COMMANDLINE \
WITH_INSTALL_CLIENT_DESKTOP_FILES WITH_OPENSSL WITH_OSS \
WITH_WINPR_DEPRECATED WITH_ZLIB
の最後に WITH_INTERNAL_RC4 WITH_INTERNAL_MD4 を追加して
CMAKE_ON= CHANNEL_SERIAL CHANNEL_URBDRC_CLIENT RDTK_FORCE_STATIC_BUILD \
WITH_CLIENT_SDL_VERSIONED WITH_FREERDP_DEPRECATED \
WITH_FREERDP_DEPRECATED_COMMANDLINE \
WITH_INSTALL_CLIENT_DESKTOP_FILES WITH_OPENSSL WITH_OSS \
WITH_WINPR_DEPRECATED WITH_ZLIB WITH_INTERNAL_RC4 WITH_INTERNAL_MD4
としてビルドします。
変なオプションの OpenSSL をインストールをして全体に影響をあたえるよりも、影響範囲が net/freerdp3 だけに限定されるのですが、ports
のバージョンアップなど自前でメンテしないといけなくなってしまいます。ports の方で正式に対応してくれれば一番いいので、パッチを試しに送ってみたほうがいいかも、ということで検討中です。
続く
この後に他の件を続けて書こうと思っていたのですが、上記の件だけでそれなりの分量で、他のネタは困ってる人が少なそうだしなぁということでここで一区切りして、続きは別記事にまとめます。
