1

客户端需要由服务器进行身份验证,因此需要发送凭据。凭证可以以加密形式存储在客户端数据库中。由于服务器的证书是已知的,为了提供最佳的安全性,客户端可以使用服务器的公钥来加密密码。但现在的问题是如何在没有双重加密的情况下发送密码。

例如,假设服务器的认证 URL 是“ https://example.com/a?u=user&p=password ”,那么客户端必须将这个字符串的 SSL 加密数据发送给服务器。由于客户端只存储加密后的密码,它必须想办法将ssl_encrypt("https://example.com/a?u=user&p=")+pre_encrypted_password其作为一个整体发送给服务器。

客户端正在使用 WinHTTP api,那么有什么方法可以实现吗?

4

2 回答 2

4

不,SSL 不能以这种方式工作 - 通过 SSL 连接发送的数据使用对称加密算法(通常为 AES、RC4 或类似算法)进行加密,使用在初始 SSL 握手期间建立的密钥。服务器的公钥/私钥仅在初始握手期间使用;之后,它们就不再使用了。

无论如何,以这种方式存储密码并不会使其更加安全。如果它以可以发送到服务器的加密形式存储,那么任何设法获得它的人都可以以这种方式使用它;该加密形式与密码等效,因此仅存储密码并不好!

于 2013-05-28T23:42:36.587 回答
0

您可以保存服务器发送的证书(假设该证书具有允许加密的 RSA 密钥),然后在 PKCS#7 数据加密中使用它,并将加密的数据发送到服务器。出现了另一个问题 - 服务器端代码是否有权访问证书。在许多配置中情况并非如此。因此服务器将无法解密数据。

此外,正如 EJP 所指出的,这没有多大意义,因为您将仅使用相同的密钥对数据进行双重加密(技术上的密钥会有所不同,但增加的安全级别将是最小的)。

于 2013-05-29T05:04:52.543 回答