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

标签 security ssl https passwords libcurl

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

最佳答案

在现实生活中你不应该太担心。如果您担心此类攻击,也许可以研究一下智能卡中基于硬件的 key 和证书。

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

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

在现实生活中,如果您的计算机被拥有,以便某人可以侵入他/她不应该访问的进程 - 您已经受到损害,不知道试图使其变得模糊。

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

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

关于security - 如何使用 libcurl 在客户端应用程序中缓存 SSL 客户端证书密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845906/

相关文章:

windows - 如何从 .cer 和 .key 获取 .pfx 文件?

iPhone - 发送特定 URL 的 VPN 流量

Firebase 托管 : Change default SSL to Norton SSL?

ssl - 为什么有些https网站不需要ocsp查询

Facebook JavaScript SDK 通过 HTTPS 加载非安全项目

node.js - P12证书 "Not enough data"错误

security - 带有 API 的 TrueCrypt 替代方案

javascript - 使用 Javascript 获取 Windows 身份验证 token 以具有集成安全性(不使用 IIS)

javax.net.ssl.SSLHandshakeException HttpsURLConnection

android - 将 JKS 文件转换为 BKS 或创建 BKS 文件