我正在开发SSL-Cipher-Scanner。这意味着我指定了主机和端口,我的程序告诉我主机接受哪些密码。
我目前的版本有效,但速度很慢(每个主机约20到30秒),因为我为每个密码打开了一个新连接。
我使用以下方法(按此顺序):
ssl_ctx = SSL_CTX_new(method);
bio = BIO_new_ssl_connect(ssl_ctx);
BIO_set_conn_port(bio, port);
BIO_set_conn_hostname(bio, host);
BIO_get_ssl(bio, &ssl);
SSL_set_cipher_list(ssl, cipher);
BIO_do_connect(bio);
BIO_do_handshake(bio);
我现在尝试再次设置密码并再次进行握手而不是再次连接。在wireshark中,我看到它实际上使用了更改密码规范协议,但服务器返回了加密警报(因此我无法告诉您它是哪一个)。
的返回值SSL_set_cipher_list(ssl, cipher);
和
BIO_do_handshake(bio);
都是1,所以它应该是成功的。
有人可以帮我解决如何在打开的连接上更改使用过的密码吗?
一些其他信息:我使用openssl版本1.0.2h
答案 0 :(得分:3)
你在做什么与renegotiation DOS attack非常相似。服务器对可以进行多少重新协商的限制并不少见。通常,在初始TLS握手之后,不允许或仅允许一次重新协商以防止此类DOS攻击。