![连接到 Sql-Server 时密码是否以明文形式发送?](https://linux22.com/image/537848/%E8%BF%9E%E6%8E%A5%E5%88%B0%20Sql-Server%20%E6%97%B6%E5%AF%86%E7%A0%81%E6%98%AF%E5%90%A6%E4%BB%A5%E6%98%8E%E6%96%87%E5%BD%A2%E5%BC%8F%E5%8F%91%E9%80%81%EF%BC%9F.png)
今天有人问我这个问题,说实话我不知道答案。如果你使用没有 sspi 的连接字符串连接到服务器,第三方是否有办法拦截在线登录的密码是多少?
"Data Source=MyServer;Initial Catalog=MyDatabase;User Id=sa;Password=CanThisBeSniffed;"
我并不是在问有关 MiTM 攻击的问题,只是问有人在同一台计算机或网络上的同一个集线器上列出了正在运行的 wireshark 或类似程序。
我自己启动了 wireshark,并没有看到纯文本,但它可能是简单的混淆或适当的加密,我只是想知道哪一个。
答案1
SQL Server 2000 及更高版本(可能是 2005 及更高版本,我忘了;它在我的新书的某个地方)SQL 身份验证登录(而不是 Windows 身份验证)使用的身份验证过程由自签名 SSL 证书加密,该证书由 SQL Server 实例在安装数据库引擎时生成。
答案2
Nick 提出了一个很好的观点,即那篇博文并不是你想要的。对此我深表歉意。
MSDN 库包含有关配置 SSL 连接的详细信息http://msdn.microsoft.com/en-us/library/ms189067.aspx
但是,以下内容有点含糊
Credentials (in the login packet) that are transmitted when a client application
connects to SQL Server are always encrypted.
目前还不完全清楚(至少对我来说)这是否意味着无论 SSL 设置如何,它们始终是加密的。
如果您对此感到担心,我会启用 SSL。
答案3
我也对此进行了一些调查,发现可能存在 MITM 攻击,可以强制降级 - 请参阅这里
一些较旧版本的 SQL 不支持 SSL 加密登录,并以明文形式发送密码,因此如果加密身份验证失败,客户端和服务器都支持回退到未加密身份验证。但您不能故意将现代版本的 SQL Server 设置为 ENCRYPT_NOT_SUP(请注意,攻击是 MITM PRELOGIN 会话并将标志更改为 ENCRYPT_NOT_SUP 而不是 ENCRYPT_OFF - 这是 SQL 的默认模式)。