2011-04-12 25 views
0

我已经实现了从客户端(Android)接收加密文件的HTTP服务器(CherryPy和Python)。我正在使用OpenSSL来解密上传的文件。目前我使用openssl -enc -pass file:password.txt -in encryptedfile -out decryptedfile来执行服务器端的解密。正如你所看到的,openssl使用的密码存储在一个纯文本文件(password.txt)中。用于在服务器上存储Openssl密码的安全选项(Linux,Python,CherryPy)

是否有更安全的方式来存储此OpenSSL密码?

谢谢。

回答

0

将它传递给更高的FD,并在命令行中使用该FD。请注意,在运行过程之前,您需要使用参数preexec_fn来设置FD。

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

谢谢。你能解释为什么在这种情况下使用文件描述符(FD)更安全吗? – 2011-04-12 04:40:58

+1

因为你不需要临时文件来保存密码; Python进程可以直接将它注入到openssl进程中。 – 2011-04-12 06:03:45

0

为了保护用户的隐私和其他原因,密码通常不被服务器存储。通常,用户选择在服务器上以某种形式存储的密码。

用户随后通过根据基于用户输入提供的散列检查存储的散列来与web应用程序进行认证。一旦客户端被认证,提供会话标识符允许使用服务器资源。在此期间,用户可以例如上传文件。假设托管服务器已正确安全并且没有其他问题,则服务器上文件的加密应该是不必要的。

在这种情况下,身份验证机制不明确,导致危险的威胁或上传文件的生命周期也不明确。

似乎服务器正在接收加密文件,加上某种类型的密码。在传输阶段或在服务器上存储密码时,是否要考虑保护密码? HTTPS协议可以帮助防范有关传输文件/数据的威胁。正如我从您的描述中看到的,似乎是服务器端的存储问题。

一旦密码被服务器接收到(单独或通过使用主密码),加密密码会增加另一层安全性,但这种方法并非没有错,因为密码(1)需要存储在服务器以明文形式访问文件(2),或者需要由管理员在需要时作为需要密码的任何处理的一部分手动输入 - 请注意,使用密码加密的所有资源都不可用于用户。

尽管我并没有完全意识到发生了什么,但最安全的做法是重新开发Web应用程序,仔细考虑设计及其要求。

+0

感谢您的回复。让我解释一下用例。 – 2011-04-12 04:48:30

+0

我有一个Android设备上的加密文件,我想要上传到服务器。文件传输是使用HTTP而不是HTTPS完成的,因为文件很大,因此离线加密(以节省电池和CPU)。客户端可能不知道加密密钥。正如你所说的,我可以假设服务器是“安全的”并将密钥作为纯文本存储在服务器上,或者客户端可以通过安全连接(HTTPS)发送密码。服务器可以将SHA1哈希与密码的哈希匹配,然后使用密码对文件进行加密。 – 2011-04-12 04:57:01

+1

@Soumya Simanta:请注意,HTTP连接比HTTPS更容易受到MITM攻击。考虑将文件的消息摘要与HTTPS中的密码一起传输,然后使用HTTP传输文件。不过,我会尽一切HTTPS。由于两种方法都具有相同的操作,所以差别似乎很小。 HTTPS可能更快,因为传输和加密都是并行完成的,而不必在通过网络发送之前对整个文件进行加密。服务器不需要解密就可以节省资源。 – sosc 2011-04-12 05:49:12

相关问题