通过SSL发送预加密数据

时间:2013-05-28 23:30:16

标签: security ssl winhttp

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

例如,假设服务器的身份验证URL为“https://example.com/a?u=user&p=password”,因此客户端必须将此字符串的SSL加密数据发送到服务器。由于客户端仅存储加密密码,因此必须找到将ssl_encrypt("https://example.com/a?u=user&p=")+pre_encrypted_password作为整体发送到服务器的方法。

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

2 个答案:

答案 0 :(得分:4)

没有。 SSL不起作用 - 通过SSL连接发送的数据使用对称加密算法(通常是AES,RC4或类似)使用在初始SSL握手期间建立的密钥进行加密。服务器的公钥/私钥仅在初始握手期间使用;之后,他们没有被使用。

无论如何,以这种方式存储密码并不会使它更安全。如果它以加密形式存储,可以发送到服务器,任何设法获得它的人都可以这样使用它;加密的表单是密码等效的,所以它只比存储密码好!

答案 1 :(得分:0)

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

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