質問: opensslを介したハンドシェイクの開始時にサーバーに特定の楕円曲線を使用させるにはどうすればよいですか? opensslに、証明書またはキーで要求している特定の楕円曲線をサーバーに使用させる可能性またはコマンドはありますか?使用できる曲線をプロセスに「尋ねる」ことはできますか?
回答: opensslに、サーバーに特定の楕円曲線を使用させる可能性またはコマンドはありますか? 一般的に、confファイルを介してこれを行う方法がわかりません。 ssl_conf_* api呼び出し(以下に表示)は、構成ファイルの一部である可能性があることを示しているようです。しかし、私はそれをしたことがありません。 opensslを介したハンドシェイクの開始時にサーバーに特定の楕円曲線を使用させるにはどうすればよいですか? できますが、ソースを変更する必要があります。これは、プライベートメールのopenssl開発者の1人からのものです。ただし、以下に説明するパッチ適用方法を使用しているため、実際に機能するかどうかはわかりません。under 0.9.x: int nid = obj_sn2nid(named_curve); ecdh = ec_key_new_by_curve_name(nid); ssl_ctx_set_tmp_ecdh(ctx,ecdh); ec_key_free(ecdh); under 1.x: ssl_conf_ctx_set_ssl_ctx(cctx, ctx); ssl_conf_cmd(cctx, "-named_curve", "p-256"); ssl_conf_ctx_finish(cctx); 1.0.1以下の場合、ソースをt1_lib.cに変更できます。特に、ssl_prepare_clienthello_tlsextとpref_listを見つけて、好きなように変更してください。デフォルトでは次のようになります。static int pref_list[] = { nid_sect571r1, /* sect571r1 (14) */ nid_sect571k1, /* sect571k1 (13) */ nid_secp521r1, /* secp521r1 (25) */ nid_sect409k1, /* sect409k1 (11) */ nid_sect409r1, /* sect409r1 (12) */ nid_secp384r1, /* secp384r1 (24) */ nid_sect283k1, /* sect283k1 (9) */ nid_sect283r1, /* sect283r1 (10) */ nid_secp256k1, /* secp256k1 (22) */ nid_x9_62_prime256v1, /* secp256r1 (23) */ nid_sect239k1, /* sect239k1 (8) */ nid_sect233k1, /* sect233k1 (6) */ nid_sect233r1, /* sect233r1 (7) */ nid_secp224k1, /* secp224k1 (20) */ nid_secp224r1, /* secp224r1 (21) */ }; 問題#3179:機能要求:クライアントのec曲線の設定リストの設定 も参照してください。openssl 1.0.2以降の場合、 ssl_ctx_set1_curves を使用できます。 pref_listは、ソースをgrepするときに存在しなくなりました。