当我使用 SSLSCAN 检查我的服务器的密码套件时,我发现有三种状态:已接受、已拒绝和已失败。之后,我尝试禁用 RC2(40bits) 密码。我在 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 40/128] 下创建了一个新的键“Enabled”=dword:00000000。SSLSCAN 显示 EXP-RC2-CBC-MD5 (40bits) 已“失败”,但其余 RC2 (40bits)密码均已“拒绝”。
这让我很困惑:失败和被拒绝有什么区别?我在谷歌上找到了所有信息,包括 SSLSCAN 主页,但没有找到明确的答案。
答案1
我对同样的事情感到疑惑,看了源代码(“使用源头,卢克!”:),它只是返回值的SSL_connect()
来自 OpenSSL 库. 文档指出:
Accepted
(1
) 方法:TLS/SSL 握手是成功地完成后,TLS/SSL 连接已建立已确立的。
Rejected
(0
) 方法:TLS/SSL 握手是不是成功的但关闭控制并遵守TLS/SSL协议的规范。
SSL_get_error()
使用返回值ret进行调用,以查找原因。Failed
(<0
) 方法:TLS/SSL 握手是不是成功的,因为致命错误发生在协议层面或者A连接失败发生。关闭是不干净。如果需要采取行动来继续非阻塞 BIO 的操作,也会发生这种情况。调用
SSL_get_error()
返回值ret来查找原因。
后两者后面可以跟一个N/A
, 如果https不可用。
所以我认为sslscan
应该包含一个--verbose
或-v
选项来调用SSL_get_error()
并输出失败(或被拒绝)的实际原因。
这将非常有用。因为目前它还不是。
目前,我所能建议的是手动连接更真实的客户端,强制在该客户端或服务器上使用某种密码,然后让它向您显示实际原因。sslscan
当然, 除非你想改进的代码。:)