在服务器上安全存储OpenSSL密码的选项(Linux、Python、CherryPy)

0 投票
2 回答
1216 浏览
提问于 2025-04-16 15:32

我实现了一个HTTP服务器(用CherryPy和Python),可以接收来自客户端(Android)的加密文件。我正在使用OpenSSL来解密上传的文件。目前,我在服务器端使用 openssl -enc -pass file:password.txt -in encryptedfile -out decryptedfile 来进行解密。正如你所看到的,OpenSSL使用的密码存储在一个普通的文本文件(password.txt)中。

有没有更安全的方法来存储这个OpenSSL的密码呢?

谢谢。

2 个回答

0

为了保护用户的隐私和其他原因,服务器通常不会直接存储密码。一般来说,用户会选择一个密码,然后这个密码会以某种方式被转换成一个“哈希值”存储在服务器上。

用户在使用网页应用时,会把自己输入的内容转换成哈希值,然后和服务器上存储的哈希值进行对比。如果匹配成功,用户就被认证通过,服务器会给用户一个会话标识符,这样用户就可以使用服务器的资源了。在这个过程中,用户可以上传文件。假设服务器的安全性没有问题,文件在服务器上加密就不是必要的了。

在这种情况下,认证机制并不明确,也没有说明可能存在的威胁,或者上传文件的生命周期。

看起来服务器接收的是一个加密的文件,还有某种类型的密码。在文件传输过程中,密码的保护是否被考虑到?或者在服务器上存储时是否有考虑?使用HTTPS协议可以帮助保护文件或数据在传输过程中的安全。从你的描述来看,似乎更关心的是服务器端的存储问题。

一旦服务器接收到密码,对密码进行加密(无论是单独加密还是使用主密码)可以增加一层安全性,但这种方法也有缺陷,因为密码要么需要以明文形式存储在服务器上以便访问文件,要么需要管理员在需要时手动输入,这样一来,任何用密码加密的资源对用户来说就无法使用了。

虽然我并不完全了解具体情况,但最安全的做法是重新设计这个网页应用,仔细考虑它的设计和需求。

0

把它通过一个更高的文件描述符(FD)来处理,然后在命令行中使用这个文件描述符。需要注意的是,你得用preexec_fn这个参数来在进程运行之前设置好文件描述符。

subprocess.Popen(['openssl', ..., 'file:/dev/fd/12', ...], ...,
  preexec_fn=passtofd12(password), ...)

撰写回答