【发布时间】:2020-04-01 18:27:42
【问题描述】:
我一直面临这个问题,我无法在 Client hello tls 协议层发送 RC4-MD5 密码。 我当前的代码使用 curl SSL CTX CALLBACK。
你可以在下面看到我的代码....这里没什么特别的,但最后一个密码没有进入客户端你好 我的 tls 协议是 http1.0、tlsv1.2,我编译了带有弱密码选项的 openssl(它适用于 DES 密码)
CURLcode sslctxfun(CURL *curl, void *sslctx, void *parm)
{
sslctxparm *p = (sslctxparm *) parm;
SSL_CTX *ctx = (SSL_CTX *) sslctx;
int ret;
SSL_CTX_set_max_proto_version(ctx, TLS1_2_VERSION);
SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION);
ret=SSL_CTX_set_cipher_list(ctx, "AES256-SHA256,AES128-SHA256,AES256-SHA,AES128-SHA,DES-CBC3-SHA,RC4-SHA,RC4-MD5");
.....
SSL_CTX_set_options(ctx, SSL_OP_ALL);
SSL_CTX_set_options(ctx, SSL_OP_NO_TICKET);
SSL_CTX_set_options(ctx, SSL_OP_NO_ENCRYPT_THEN_MAC);
SSL_CTX_set_options(ctx, SSL_OP_CIPHER_SERVER_PREFERENCE);
SSL_CTX_set_options(ctx,SSL_OP_NO_RENEGOTIATION);
SSL_CTX_set_options(ctx, SSL_OP_TLS_ROLLBACK_BUG );
SSL_CTX_set_options(ctx, SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS );
SSL_CTX_set_options(ctx, SSL_OP_NO_COMPRESSION );
SSL_CTX_set_options(ctx, SSL_OP_LEGACY_SERVER_CONNECT );
SSL_CONF_CTX *cctx;
cctx = SSL_CONF_CTX_new();
SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_FILE);
SSL_CONF_CTX_set_ssl_ctx(cctx, ctx);
ret=SSL_CONF_cmd(cctx, "SignatureAlgorithms", "RSA+SHA256:RSA+SHA512:RSA+SHA384:RSA+SHA1");
....
}
【问题讨论】:
-
这段代码不完整。你是作为服务器还是客户端运行?您要连接的对等方是否支持 RC4-MD5 密码?
-
我是客户。服务器需要一个 1-1 的客户端 hello 数据包。其中客户端 hello 应该响应客户端支持 rc4-md5 并且 ssl3/tls 标准确实承认这一点。其余的 url 和 post 数据代码由 libcurl 处理。简单看一下数据包,我发现 rc4-md5 没有被客户端(我)作为支持的密码发送