PHP+curlからSSLを制御していないバグのあるWebサーバーと通信しようとしています。
私はopenssllibに対して直接小さなCプログラムを作成し、SSL_CTX_set_options()の呼び出しでopensslオプションSSL_OP_NO_COMPRESSIONとSSL_OP_DONT_INSERT_EMPTY_FRAGMENTSを明示的に有効にすると、それを機能させることができることを確認しました。このような:
SSL_CTX_set_options(ctx, SSL_OP_NO_COMPRESSION | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)
しかし...それは私の孤立したCプログラムにあります。
どういうわけか、SSL接続を確立するときにPHP + curlにこれらのオプションを設定させることはできますか?CURLははるかに高いレベルで動作しているようです。
これまでのところ、私自身の調査結果は次のとおりです。
については知って
curl_setopt
いますが、リストにあるようなオプションはありません。ストリームオプションと呼ばれるものを見つけましたが、それらがCURLでどのように使用されているか、または使用されているかどうかがわかりません。また、必要なオプションに一致するものがありません。
opensslに関するPHPマニュアルは、キーと証明書を処理する関数に関するものにすぎないようです。
次に、HttpRequest setSslOptionsがありますが、これもオプションをCURLコンテキストに厳密に一致させているようです。
アップデート
圧縮を無効にするオプションに関する「user2076645」からの応答の後、私はPHPのソースのクローンを作成し、自分自身を調べました。
具体的には、次のコードを見つけました。
#if OPENSSL_VERSION_NUMBER >= 0x0090605fL
ssl_ctx_options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS;
#endif
これにより、必要なオプションが明示的に無効になります。コミットメッセージも調べましたが、SSLへの攻撃の可能性に対する修正でした。
ですから、現在、PHPからは実行できないと思います:-(