【问题标题】:How to cache SSL client certificate password in client application using libcurl如何使用 libcurl 在客户端应用程序中缓存 SSL 客户端证书密码
【发布时间】:2009-12-04 09:43:50
【问题描述】:
我们有一个(多操作系统)应用程序,它使用 libcurl 与 https 服务器通信并使用 SSL 客户端认证。当客户端认证受密码保护时,应用程序必须要求用户输入密码。应用程序向服务器发送数百个不同的 https 请求,因此我们不能在每次创建新连接时要求用户输入密码。现在我们只需在应用程序启动时提示用户输入一次密码,然后通过“CURLOPT_KEYPASSWD”选项将密码设置为 curllib。但我担心恶意用户很容易侵入正在运行的进程并读取客户端认证密码。无论如何我可以缓存客户端认证密码并防止它被轻松地从内存中读取?
【问题讨论】:
标签:
security
ssl
https
passwords
libcurl
【解决方案1】:
在现实生活中,您不必为此担心太多。如果您担心此类攻击,不妨研究一下智能卡中基于硬件的密钥和证书。
对抗交换和冷启动攻击的一些建议:
- 锁定保存密码的内存,不允许它被换出(mlock+mprotect 和 posix 上,Windows 也有类似的功能)
- 可能会加密保存密码的内存并仅在使用密码时解密。
在现实生活中,如果您的机器是私有的,因此有人可以侵入他/她不应该访问的进程 - 您已经被入侵了,不知道试图让它变得模糊。
如果您认为您可以控制缓存 - 再想一想 - 在某些情况下,您永远无法知道 curl 是否会使用密码复制和泄漏内存。
如果您非常重视 SSL 和安全性,请使用硬件令牌或智能卡。否则,一旦主机被入侵,您的软件和通过该主机运行的任何访问代码都会被入侵。