我正在编写一个客户端/服务器,允许客户数据在我们的总部和公司内部的移动销售人员之间共享。
服务器将客户数据下载并写入XML文件,但也将数据保存在内存中,以便它可以充当本地客户端。
我打算对ArrayList进行序列化,以便可以通过互联网轻松发送客户数据。这有多安全?在传输Serialized对象之前,我应该查看一些表单加密吗?
答案 0 :(得分:4)
我不会将加密作为序列化的一部分来执行。
这里有两个问题:
1和2是单独的问题,将它们组合成一个解决方案只会在将来给自己造成问题。
我会使用开箱即用的序列化,然后使用安全的传输渠道,如TLS。
答案 1 :(得分:3)
我的猜测,请看一下HTTPS。
答案 2 :(得分:2)
你不应该考虑序列化部分。在序列化过程结束时,您将获得数据(二进制或XML),您应该将其视为不安全。
如果您的计划是通过网络安全地传输它,您应该查看HTTPS,但如果您打算通过电子邮件或文件传输等其他方式进行传输,或者您需要安全地存储或存档它,您可能应该看看PKCS#7 and related standards。
答案 3 :(得分:2)
我打算对ArrayList进行序列化,以便可以通过互联网轻松发送客户数据。这有多安全?
像在明信片上打印并将其放入邮件一样安全。您和接收者之间的任何链接都可以看到内容。
在传输Serialized对象之前,我应该查看一些表格加密吗?
这是通常的做法。传输级别安全性,例如安全套接字,客户端和服务器之间的连接已加密,但消息显示在任何一端的“纯文本”中,或者您可以加密消息本身,然后在客户端中解密。加密消息而不是传输更复杂,因为它会影响更多层,但允许您保存消息或从客户端服务器更改为允许缓存的内容。如果您担心如果移动中的人丢失笔记本电脑会丢失信息,那么加密消息并仅在使用时解密它们可能会更好。 (另一种方法是加密驱动器,保存任何客户消息,保护所有内容,但也影响计算机上的所有内容,因此需要更改公司IT策略)。
你当然可以同时使用这三种。
答案 4 :(得分:2)
我打算序列化 ArrayList使客户数据 可以很容易地发送过 互联网。这有多安全?我是不是该 之前考虑一些表格加密 我传输Serialized对象?
加密不应该在序列化步骤中发生。要清楚:序列化是将对象转换为字符串。所有序列化都应该在明确的情况下完成,而不会在那里进行任何不必要的调整以使事情变得复杂。
一旦准备好导出数据包,就应该进行加密。如果您正在与目标进行“实时”通信(例如通过网络),则应使用SSL来保护线路。幸运的是,只需将SslStream (MSDN)附加到TcpClient
即可。请注意,在较大(未加密)的流中加密一小部分比特通常是错误的安全性。为了安全起见,整个谈话应该是安全的。
另一方面,如果您要存储这些位(即在文件中),那么您应该使用某种脱机加密。同样,.NET框架为您处理所有细节;只需将CryptoStream对象附加到FileStream
,即可完成。
答案 5 :(得分:2)
Serialize,gzip,然后通过HTTPS发送。保持这些步骤的正确顺序非常重要。压缩加密数据不起作用。加密未压缩数据需要更多时间,理论上降低了安全性。
答案 6 :(得分:1)
使用HTTPS或TCP over SSL取决于您的通信渠道。如果它需要在每一方安全地部署您的证书,并且其中的所有内容都是安全的。
另外正如您所说的,在序列化之前加密可以解决问题,您可以在两侧使用一个密钥,您需要安全地存储密钥并确保无法访问它们。然而,这并不是很好,因为您可能希望稍后更换它们,密钥管理可能会有点痛苦。我会说坚持使用HTTPS / TCP + SSL