我正在寻找有关“ecdh_tmp_cb”回调的使用及其使用方法的信息?我搜索得足够多但没有得到任何信息。
答案 0 :(得分:1)
有人可以帮忙提供有关“ecdhe_tmp_cb”回调的使用及其使用方式的信息吗?
我相信有些功能是在1.0.2添加的,在1.1.0时删除了。它们在1.0.2处被添加为带状辅助,因为由于模数尺寸(IIRC)的预测,常规回调是不合适的。它们在1.1.0被移除,因为库的接口可能会发生变化,足以提供所需的内容。
我似乎记得这两个函数(来自ssl.h
)会发送keylength
的伪造值:
#ifndef OPENSSL_NO_ECDH
void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,
EC_KEY *(*ecdh)(SSL *ssl,int is_export,
int keylength));
void SSL_set_tmp_ecdh_callback(SSL *ssl,
EC_KEY *(*ecdh)(SSL *ssl,int is_export,
int keylength));
#endif
keylength
是确定字段(种类)所需要的。但是,没有办法区分素数曲线或二元曲线。
回调中真正需要的是商定的曲线。或者您需要在服务器上选择曲线之前挂钩该过程,以便您可以影响选择。据我所知,该流程和信息从未可用。
人们过去常常在1.0.1中做的只是使用secp256r1
,因为它几乎无处不在。更有安全意识的雄心勃勃的人会使用secp521r1
。 secp384r1
有点奇怪的曲线选择偶尔出现。另请参阅InfoSec.SE上的Which elliptic curve should I use?。
选择曲线后,如secp256r1
,您生成的临时值是该字段中的短暂密钥对。您可以在每个连接上生成新值;你可以每小时产生一次价值;你可以每天产生一次价值;如果你一直使用相同的值,它实际上是一个静态密钥。
第{53行}周围的Change Log状态类似。如果向上滚动,您会看到它适用于1.1.0及更高版本。 (声明“1.0.2h和1.1.0之间的变化”表示它适用于1.1.0,而不是1.0.2i及以上)。
SSL_ {CTX_} set_ecdh_auto()已被删除,ECDH支持是 现在总是启用。如果要禁用支持,则应该 使用支持的密码列表将其排除。这也意味着 “-no_ecdhe”选项已从s_server中删除 [Kurt Roeckx]
SSL_ {CTX} _set_tmp_ecdh(),可在内部设置1 EC曲线 调用
SSL_ {CTX_} set1_curves()可以设置列表 [Kurt Roeckx]删除对SSL_ {CTX_} set_tmp_ecdh_callback()的支持。你应该 设置 您希望使用SSL_ {CTX_} set1_curves()支持的曲线 [Kurt Roeckx]
更改日志还声明1.1.0使用:
- 按顺序将ECC默认曲线列表更改为:x25519,secp256r1,secp521r1,secp384r1。
[Rich Salz]
我搜索得足够多但没有得到任何信息。
通常,当您发现未充分记录的内容时,您希望查看OpenSSL源代码。要查看的来源是s_client
和s_server
。您可以在<openssl src>/apps/
目录中找到它们。 [不出所料]源文件名为s_client.c
和s_server.c
。
从下面的搜索中,ssl/ssl_conf.c
看起来也很有趣。下面的 *.pod
文件是手册页的来源。如果 *.pod
文件有点击,那么您知道可以输入man SSL_CTX_set_tmp_dh_callback
并获取该功能的手册页。
$ grep -IR _set_tmp_ *
CHANGES: *) SSL_{CTX}_set_tmp_ecdh() which can set 1 EC curve now internally calls
CHANGES: 'default key' from SSL_CTX_set_tmp_dh would always be lost, meaning
CHANGES: are in detail: SSL_need_tmp_RSA, SSL_set_tmp_rsa, SSL_set_tmp_dh,
CHANGES: SSL_set_tmp_rsa_callback and SSL_set_tmp_dh_callback. Additionally a new
CHANGES: SSL_CTX_set_tmp_{rsa,dh}_callback().
apps/s_server.c: else if (!SSL_CTX_set_tmp_dh(ctx, dh)) {
apps/s_server.c: else if (!SSL_CTX_set_tmp_dh(ctx2, dh)) {
doc/ssl/ssl.pod:=item long B<SSL_CTX_set_tmp_dh>(SSL_CTX* ctx, DH *dh);
doc/ssl/ssl.pod:=item long B<SSL_CTX_set_tmp_dh_callback>(SSL_CTX *ctx, DH *(*cb)(void));
doc/ssl/ssl.pod:L<SSL_CTX_set_tmp_dh_callback(3)>,
doc/ssl/SSL_CTX_set_cipher_list.pod:(see L<SSL_CTX_set_tmp_dh_callback(3)>).
doc/ssl/SSL_CTX_set_cipher_list.pod:(see L<SSL_CTX_set_tmp_dh_callback(3)>).
doc/ssl/SSL_CTX_set_cipher_list.pod:L<SSL_CTX_set_tmp_dh_callback(3)>,
doc/ssl/SSL_CTX_set_options.pod:(see L<SSL_CTX_set_tmp_dh_callback(3)>).
doc/ssl/SSL_CTX_set_options.pod:L<SSL_CTX_set_tmp_dh_callback(3)>,
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod:SSL_CTX_set_tmp_dh_callback, SSL_CTX_set_tmp_dh, SSL_set_tmp_dh_callback, SSL_set_tmp_dh - handle DH keys for ephemeral key exchange
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod: void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod: long SSL_CTX_set_tmp_dh(SSL_CTX *ctx, DH *dh);
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod: void SSL_set_tmp_dh_callback(SSL *ctx,
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod: long SSL_set_tmp_dh(SSL *ssl, DH *dh)
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod:SSL_CTX_set_tmp_dh_callback() sets the callback function for B<ctx> to be
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod:SSL_CTX_set_tmp_dh() sets DH parameters to be used to be B<dh>.
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod:SSL_set_tmp_dh_callback() sets the callback only for B<ssl>.
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod:SSL_set_tmp_dh() sets the parameters only for B<ssl>.
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod:are advised to either use SSL_CTX_set_tmp_dh() or alternatively, use
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod: if (SSL_CTX_set_tmp_dh(ctx, dh_2048) != 1) {
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod:SSL_CTX_set_tmp_dh_callback() and SSL_set_tmp_dh_callback() do not return
doc/ssl/SSL_CTX_set_tmp_dh_callback.pod:SSL_CTX_set_tmp_dh() and SSL_set_tmp_dh() do return 1 on success and 0
include/openssl/ssl.h:# define SSL_CTX_set_tmp_dh(ctx,dh) \
include/openssl/ssl.h:# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \
include/openssl/ssl.h:# define SSL_set_tmp_dh(ssl,dh) \
include/openssl/ssl.h:# define SSL_set_tmp_ecdh(ssl,ecdh) \
include/openssl/ssl.h:# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1
include/openssl/ssl.h:# define SSL_set_tmp_rsa(ssl,rsa) 1
include/openssl/ssl.h:# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0)
include/openssl/ssl.h:# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0)
include/openssl/ssl.h:void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
include/openssl/ssl.h:void SSL_set_tmp_dh_callback(SSL *ssl,
ssl/ssl_conf.c: rv = SSL_CTX_set_tmp_ecdh(cctx->ctx, ecdh);
ssl/ssl_conf.c: rv = SSL_set_tmp_ecdh(cctx->ssl, ecdh);
ssl/ssl_conf.c: rv = SSL_CTX_set_tmp_dh(cctx->ctx, dh);
ssl/ssl_conf.c: rv = SSL_set_tmp_dh(cctx->ssl, dh);
ssl/ssl_lib.c:void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
ssl/ssl_lib.c:void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export,
test/ssltest_old.c: SSL_CTX_set_tmp_dh(s_ctx, dh);
test/ssltest_old.c: SSL_CTX_set_tmp_dh(s_ctx2, dh);
util/libssl.num:SSL_set_tmp_dh_callback 20 1_1_0 EXIST::FUNCTION:DH
util/libssl.num:SSL_CTX_set_tmp_dh_callback 156 1_1_0 EXIST::FUNCTION:DH