有什么方法可以提取 TortoiseSVN 保存的凭据?
2 回答
简短的回答:您可以使用TortoiseSVN 密码解密器轻松显示缓存的凭据,包括密码。
长答案:这是该工具的工作原理。
凭据保存在 的子目录中%APPDATA%\Subversion\auth\
。从上一个答案中列出的它们是:
svn.simple
包含基本身份验证的凭据(用户名/密码)svn.ssl.server
包含 SSL 服务器证书svn.username
包含仅用户名身份验证的凭据(不需要密码)
第一个目录是感兴趣的目录。它似乎包含名称看起来像 GUID 的文件;一个用于您已保存凭据的每个存储库。
这些文件中的密码由Windows 数据保护 API加密。上面的工具使用来自Obviex的示例代码来与此 API 交互并执行解密。
为了使其工作,您必须有权访问您在选中“保存身份验证”复选框时运行的同一 Windows 用户帐户。这是因为 Windows 数据保护 API 使用与您的 Windows 帐户绑定的加密密钥。如果您丢失了此帐户(或者,我相信,如果管理员重置了您的密码),那么您将无法再解密密码(可能使用暴力破解/第三方工具除外)。拥有一个具有相同用户名/密码(甚至可能是 SID)的新 Windows 帐户是不够的。
根据下面的信息,听起来您可以以某种方式在本地解密它们...
更新:来自 TortiseSVN 社区的明确回答
当它们通过加密的线路发送时,它们会在连接时使用握手和/或商定的密钥进行加密。
当它们在本地存储/读取时,它们会通过 Windows Crypto API 进行加密/解密,该 API 使用与您的 Windows 帐户相关联的密钥。
服务器无法解密本地加密的副本,因为密钥是您帐户的本地密钥。
因此,当您连接时(比如说通过 HTTPS),您的客户端会通过适当的 Windows API 获取解密的凭据,然后将它们包含在 HTTPS 传输中。HTTPS 使用 SSL 证书加密客户端和服务器之间的整个通信,而不仅仅是凭据。