いけむランド

はてダからやってきました

cygwin crypto-policies ?

Fedora/RHEL で導入されている crypto-policies が cygwin にもあるように見えるけど、そもそもこれは何?と思ったので調べた。

crypto-policies について知りたい場合は以下の記事を読めばわかる。

rheb.hatenablog.com

気になったのはどうしてこれが cygwin にも導入されているのか?という点。

最初にこれに気づいたのは ruby-puma のパッケージ化の時で、fedora の patch にどういうものがあるのかリポジトリを見たら、rubygem-puma-3.6.0-fedora-crypto-policy-cipher-list.patch という patch file があって、その中身がひっかかったから。

diff --git a/ext/puma_http11/mini_ssl.c b/ext/puma_http11/mini_ssl.c
index 7e0fd5e..88c4652 100644
--- a/ext/puma_http11/mini_ssl.c
+++ b/ext/puma_http11/mini_ssl.c
@@ -336,7 +336,7 @@ sslctx_initialize(VALUE self, VALUE mini_ssl_ctx) {
     SSL_CTX_set_cipher_list(ctx, RSTRING_PTR(ssl_cipher_filter));
   }
   else {
-    SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL@STRENGTH");
+    SSL_CTX_set_cipher_list(ctx, "PROFILE=SYSTEM");
   }
 
 #if OPENSSL_VERSION_NUMBER < 0x10002000L

SSL_CTX_set_cipher_list は OpenSSL の関数であるにもかかわらず、この patch を適用したら "PROFILE=SYSTEM" という Fedora/RHEL 定義の文字列をハードコードされてしまうが、OpenSSL 側が知らない文字列を渡しても、実行時エラーにならないのか?

というわけで OpenSSL 側のリポジトリを見たら、対応する patch を適用してた。

となると、cygwin の OpenSSL にもこの patch が適用されていれば、ruby-puma にも rubygem-puma-3.6.0-fedora-crypto-policy-cipher-list.patch を適用する方が望ましいということになる。

というわけで確認したら、cygwin 側でも適用してた。

commit log を遡ると、fedora patches を取り込みだしたタイミング (1.1 系に移行) で入った模様。

そのあとに "PROFILE=SYSTEM" のほかにどういうものがあるのか?などを調べてたら、最終的に crypto-policies にたどり着いたというわけ。

wiki.bit-hive.com

ちなみに公式にそこらへんの話を書いてるドキュメントはなさそう。今度 cygwin-app ML ででも訊いてみるか。