如何使用libcurl在客户端应用程序中缓存SSL客户端证书密码

时间:2009-12-04 09:43:51

标签: security ssl https passwords libcurl

我们有一个(多操作系统)应用程序,它使用libcurl与https服务器通信并使用SSL客户端认证。当客户端认证受密码保护时,应用程序必须要求用户输入密码。应用程序向服务器发送数百个不同的https请求,因此每次创建新连接时,我们都不能要求用户输入密码。现在我们只是提示用户在应用程序启动时输入一次密码,然后通过“CURLOPT_KEYPASSWD”选项将密码设置为curllib。但我担心恶意用户很容易入侵正在运行的进程并读取客户端认证密码。无论如何,我可以缓存客户端认证密码,还可以防止它从内存中轻松读取吗?

1 个答案:

答案 0 :(得分:3)

在现实生活中,你不应该担心它。如果您担心此类攻击,可以查看智能卡中基于硬件的密钥和证书。

打击交换和冷启动攻击的一些建议:

  • 锁定保存密码的内存,不允许将其换出(mlock + mprotect和posix,Windows也有类似的功能)
  • 可能会对保存密码的内存进行加密,并仅在使用密码时对其进行解密。

在现实生活中,如果你的机器是拥有的,以致有人可以侵入他/她不应该访问的过程 - 你已经受到了损害,不知道试图让它变得模糊不清。

如果您认为您控制缓存 - 请再想一想 - 在某些情况下,您永远无法知道curl是否会复制并使用密码泄漏内存。

如果您对SSL和安全性非常认真,请使用硬件令牌或智能卡。否则,一旦主机遭到入侵,您的软件和通过该主机运行的任何访问代码都会受到损害。