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

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

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

您不必太担心它。如果您担心此类攻击,可以查看智能卡中基于硬件的密钥和证书

对抗swap和coldboot攻击的一些建议:

  • 锁定保存密码的内存,不允许将其调出(mlock+mprotect,在posix上,Windows也有类似的功能)
  • 可能对保存密码的内存进行加密,并且仅在使用密码时对其进行解密
在现实生活中,如果您的机器是自有的,因此有人可以侵入他/她不应该访问的进程-您已经受到威胁,不知道如何让它变得模糊

如果你认为你控制了缓存——再想想——你永远不可能知道,例如,在某些情况下,curl是否会用密码复制并泄漏内存

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