0

我正在编写一个客户端/服务器,它允许客户数据在我们的总部和公司内的移动销售人员之间共享。

服务器下载并写入 XML 文件中的客户数据,但也将数据保存在内存中,以便它可以充当本地客户端。

我计划对 ArrayList 进行序列化,以便可以轻松地通过 Internet 发送客户数据。这有多安全?我应该在传输序列化对象之前研究某种形式的加密吗?

4

7 回答 7

4

作为序列化的一部分,我不会执行加密。

这里有两个问题:

  1. 将对象置于可传输的形式,即序列化。
  2. 确保传输安全。

1 和 2 是独立的问题,将它们组合成一个解决方案只会在将来给自己制造问题。

我会使用开箱即用的序列化,然后使用安全的传输通道,比如TLS

于 2009-04-03T08:49:47.290 回答
3

我的猜测,看看HTTPS。

于 2009-04-03T08:45:22.170 回答
2

您不应该考虑序列化部分。在序列化过程结束时,您会获得数据(二进制或 XML),您应该将其视为不安全的。

如果您的计划是通过网络安全地传输它,您应该研究 HTTPS,但如果您计划通过电子邮件或文件传输等其他方式传输它,或者您需要安全地存储或存档它,您可能应该研究PKCS #7 及相关标准

于 2009-04-03T08:51:37.490 回答
2

我计划对 ArrayList 进行序列化,以便可以轻松地通过 Internet 发送客户数据。这有多安全?

就像在明信片上打印并放入邮件一样安全。您和接收者之间的链中的任何内容都可以看到内容。

我应该在传输序列化对象之前研究某种形式的加密吗?

这是通常的做法。传输级别的安全性,例如安全套接字,客户端和服务器之间的连接被加密,但消息以“纯文本”形式出现在任一端,或者您可以加密消息本身,然后在客户端中解密。加密消息而不是传输更复杂,因为它影响更多层,但允许您保存消息或从客户端服务器更改为允许缓存的东西。如果您担心移动中的人丢失笔记本电脑时信息会丢失,那么加密消息并仅在使用时解密它们可能会更好。(另一种选择是对保存任何客户消息的驱动器进行加密,这样可以保护所有内容,但也会影响计算机上的所有内容,因此需要更改公司的 IT 政策)。

你当然可以同时使用这三个。

于 2009-04-03T08:52:06.007 回答
2

我计划对 ArrayList 进行序列化,以便可以轻松地通过 Internet 发送客户数据。这有多安全?我应该在传输序列化对象之前研究某种形式的加密吗?

加密不应该发生在序列化步骤。需要明确的是:序列化正在获取对象并将其转换为一串字节。您的所有序列化都应该清楚地完成,而没有任何不必要的修改以使事情复杂化。

一旦准备好导出位包,就应该进行加密。如果您正在与目的地进行“实时”通信——例如通过网络,那么您应该使用 SSL 来保护线路。幸运的是,这就像将SslStream (MSDN)附加到您的TcpClient. 请注意,仅加密较大(未加密)流中的一小部分位通常是错误的安全性。为了安全起见,整个对话应该是安全的。

另一方面,如果您正在存储这些位(即在文件中),那么您应该使用某种离线加密。同样,.NET 框架为您处理所有细节;只需将CryptoStream对象附加到您的对象上即可FileStream

于 2009-04-03T09:35:24.780 回答
2

序列化、gzip,然后通过 HTTPS 发送。以正确的顺序保持这些步骤很重要。压缩加密数据不起作用。加密未压缩数据需要更多时间,理论上会降低安全性。

于 2009-04-03T09:41:11.350 回答
1

通过 SSL 使用 HTTPS 或 TCP 取决于您的通信通道。如果它需要在每一侧安全地部署您的证书,并且其中的所有内容都是安全的。

另外,正如您所说的在序列化之前进行加密可以解决问题,您可以在双方都使用一个密钥,您需要安全地存储密钥并确保没有人可以访问它们。然而,这并不是很好,因为您可能希望稍后更换它们,并且密钥管理可能会有点痛苦。我会说坚持使用 HTTPS/TCP + SSL

于 2009-04-03T09:06:50.027 回答