由于我的主机存在一些问题,我无法在我的服务器上使用 SSL 证书(我还没有准备好更改提供商),因此无法使用 HTTPS。该服务器将与几台客户端计算机进行通信,并将传输有些保密的数据。
简单地使用 AES 加密(发送前在客户端加密,处理前在服务器上解密)而不是 HTTPS 是否合理?
这取决于您的部署环境。
用您自己的加密协议替换 SSL/TLS(和 HTTPS)以供 Web 浏览器使用总是一个坏主意,因为它依赖于不安全地交付的 JavaScript 代码(有关详细信息,请参见Security.SE 上的这个问题,例如)。
如果客户端不是 Web 浏览器,您可以使用更多选项。特别是,您可以实现消息级安全性而不是传输级安全性(HTTPS 使用的安全性)。
有许多尝试使用 HTTP 标准化消息级别的安全性。例如:
HTTPsec有一个公共规范(仍然在 WebArchive 上可用),但它是一个商业实现。我不确定这是否已被广泛审查。
WS-Security,面向 SOAP 世界。
或许更简单地说,如果您想重用现有工具,您可以使用 S/MIME 或 PGP(以与电子邮件相同的方式)来加密 HTTP 消息实体。与 HTTPS 不同,这不会保护 URL 或 HTTP 标头,但如果您不在那里放置任何敏感数据,这可能就足够了。
您自己使用“原始加密”越深入(例如,直接使用 AES),您就越有可能必须手动实现其他方面的安全性(通常,验证远程方的身份并处理预先共享密钥)。
如果您有一小部分不经常更改的客户端,您可以使用 SSH 实现自己的 SSL-Tunnel。对客户做一个;
ssh -D 4444 nulluser@example.com -N
wherenulluser
上没有外壳或文件访问权限example.com
。
然后添加 foxyproxy 白名单设置 - 以便example.com
客户端浏览器使用localhost:4040
代理。
这是一个 hack,它完全不可扩展,但正如我所说,它适用于少量静态的客户端,并且它的优点是在完全安全的同时不重新发明任何轮子。