【问题标题】:Is HTTPS traffic with self-signed certificate secure enough for desktop app to server connection?带有自签名证书的 HTTPS 流量对于桌面应用程序到服务器的连接是否足够安全?
【发布时间】:2020-07-18 12:27:42
【问题描述】:

在我的 Apache 服务器上,我使用 OpenSSL 创建了一个自签名密钥和证书对。我还将所有流量重定向到使用 HTTPS。

在我的 C# 应用程序上,我正在使用类似的东西来发送和接收数据。

StringContent encodedContent = new StringContent(str, null, "application/x-www-form-urlencoded");
client.PostAsync("https://myserverip/main.php", encodedContent)
HttpResponseMessage response = client.PostAsync(URL, encodedContent).Result;

除此之外,我还在服务器端和客户端使用 phpseclib 实现了我自己的 AES 加密。

但是所有这些加密和解密都让我很头疼。

我的问题是,我是否真的通过进一步加密将通过 HTTPS 发送的数据做出任何贡献?

【问题讨论】:

  • 是什么阻止您获得像 Let's Encrypt 这样的免费 SSL 证书?这样更安全,因为客户端不会绕过证书验证,并且您会在一定程度上免受中间人攻击。
  • 我投票结束这个问题,因为 C# / PHP 部分与问题本身无关,因此更适合 IT 安全站点。
  • 此问题询问有关 Javascript 中的客户端加密。您没有使用 javascript,但答案仍然非常适用:TLS/SSL 的重点是加密传输中的数据,而自己再次加密几乎总是浪费时间。所以除非你有一个非常具体的原因,否则不要浪费你的时间:security.stackexchange.com/questions/91483/…
  • @aepot 我没有域名,我只有一个服务器和IP地址,据我所知,无法获得签名证书。
  • 正确,但获取某些域有问题吗?也可以使用3级/4级域名。

标签: c# php encryption aes


【解决方案1】:

这完全取决于用例。对于传输安全性,通常认为 TLS 就足够了。将时间花在保护该连接上比添加额外的对策(例如消息特定加密)更好。


TLS 当然有限制,所以可能需要额外的加密:

  • TLS 不提供没有显式配置的客户端身份验证;建立连接后可能必须执行客户端身份验证。
  • 从鸟瞰角度来看,它还提供仅点对点保护 (*);一旦 TLS 安全性被剥离,数据就不受保护。
  • 同样,您可能希望将数据安全地存储在发送方或接收方。显然 TLS 不会提供这样的功能。

(*) 从 IP 协议来看,TLS 提供端到端加密,因为 TCP / UDP 允许它在多个节点上路由(跳跃)受保护的 IP 数据包,但现在它经常在之前被剥离它到达应用程序(TLS 卸载程序等)。


如果您已经有一个共享密钥,那么您可能希望在 PSK 模式下查看 TLS,但请注意,该标准的实现不像“常规”TLS 那样普遍。还要注意,您最多只能在 2 方之间共享密钥。


最后,您通过仅使用 AES 加密消息来提供有意义的安全性的机会充其量是微乎其微的。您确实需要一个特定的用例、协议、方案和最终实现。通过“仅加密数据”来做到这一点的机会很小。这样做的陷阱太多了。如果加密代码或密钥通过 TLS 连接(浏览器/JavaScript 加密)传输,则尤其如此。

【讨论】:

    【解决方案2】:

    这取决于您发送或接收的数据。 在大多数情况下,HTTPS 为通过网络发送的数据提供了很大的安全性,而添加额外的层只会使其变得多余,并且会占用处理时间。

    你可以参考这个link和这个link了解更多关于堆叠加密的信息。

    【讨论】:

      【解决方案3】:

      我不确定您的实际问题是什么,因为您在标题中提出的问题与您的文本中的内容不同。

      您标题中的问题似乎是在询问带有自签名证书的 HTTPS(= TLS)是否足够,而不是“官方”证书。如果是这样,那么是的,在安全性方面没有区别。不同之处在于客户端需要明确信任自签名证书,而由大根 CA(证书颁发机构)之一颁发的证书将被自动信任,因为它们已交付并受操作系统信任。

      但是,如果问题更多是关于您是否需要除 HTTPS 之外的其他加密,那么我的回答是:视情况而定。

      HTTPS(或 TLS)提供传输安全性,以防止数据在客户端和(目标)服务器之间传输时被看到。但是,在这两端,数据都不会被加密。如果客户端和服务器环境(文件系统等)可以被认为是可信的,那么您没有提供信息。如果是这样,HTTPS 应该就足够了。否则,有效载荷数据的额外加密将是 建议。

      【讨论】:

        猜你喜欢
        • 2012-07-02
        • 2012-05-28
        • 1970-01-01
        • 2015-06-03
        • 1970-01-01
        • 2016-05-10
        • 1970-01-01
        • 2014-05-16
        • 1970-01-01
        相关资源
        最近更新 更多