【问题标题】:SSL approach for private software私有软件的 SSL 方法
【发布时间】:2015-04-20 10:57:34
【问题描述】:

为私有应用程序使用 SSL 证书的正确方法是什么?私人是指我是唯一的用户,并且软件正在我的计算机上运行。

我想在我的两个程序之间进行加密通信。我想在它们之间发送密码,所以我需要确保远程程序不是伪造/被黑客入侵的。

据我了解,如果不涉及第三方,我不需要从 CA 获得付费 SSL 证书。

下列说法正确吗?

  1. 服务器具有私钥和自签名 SSL 证书。
  2. 客户端有一份服务器自签名证书的副本(需要妥善保护)。
  3. 在握手期间服务器将证书发送给客户端。
  4. 客户端检查证书是否相同。
  5. 客户端可以开始加密传输。

还有其他方法吗?

【问题讨论】:

标签: ssl openssl ssl-certificate


【解决方案1】:

服务器有一个私钥和自签名 SSL 证书。

是的

客户端拥有服务器自签名证书的副本(需要妥善保护)。

客户端拥有证书副本或证书公钥或这些证书的指纹。由于证书是公开的,因此不需要保护这些信息。只有服务器的私钥(仅驻留在服务器端)需要保护,因为使用此密钥可以证明证书的所有权。

在握手期间服务器将证书发送给客户端。

是的。

客户端检查证书是否相同。

有点。它可能会检查证书或公钥或指纹。

客户端可以开始加密传输。

是的。

我建议您阅读有关 certificate and public key pinning 的 OWASP 文章。它还包含各种环境的示例代码。

【讨论】:

  • 我想我需要保护客户端的证书/公钥/指纹,以防有人尝试替换它?
  • SSL 用于保护客户端和服务器之间的传输。如果有人能够直接篡改客户端,无论是替换指纹还是调试客户端,都无济于事。由于客户端本身在加密之前包含明文数据,因此篡改客户端可以向攻击者显示明文数据,并且没有 TLS 可以帮助您。
【解决方案2】:

客户端有一份服务器自签名证书的副本(需要很好的保护)。

客户端没有服务器证书的副本。他们通过 SSL 握手得到它

客户端检查证书是否相同。

不!客户端将拥有签署服务器证书的证书颁发机构的公共证书。他们将使用 CA 证书验证服务器证书,包括证书到期、CRL 等内容。不比较“相同”

在您的情况下,您使用的是自签名证书。应该让客户端忽略自签名证书并继续 SSL 握手。

我建议您再次通读 SSL 握手序列。

【讨论】:

  • “应该让客户端忽略自签名证书并继续进行 SSL 握手。” - 在这种情况下,您可以使用任何其他自签名证书,从而轻松进行中间人攻击。
  • “客户端没有服务器证书的副本。他们通过 SSL 握手获得它” - 这仅适用于一般情况。在这种情况下,应用程序具有先验知识,因此它们可以利用这些知识(而不是像浏览器那样做愚蠢的事情)。例如,请参阅Certificate and Public Key Pinning
  • @SteffenUllrich,非常正确。 OP 打算用于“一次性”、“一台计算机”。曾提到要让他/她的实验顺利进行。
  • 就我而言,只有一个客户。我需要 CA 签署的证书吗?
  • 您的情况不需要 CA 签名证书。仅使用 CA 是因为您通常无法以安全的方式将每个证书分发给每个客户端,因此您可以通过将由受信任的 CA 签名并符合主机名的所有内容视为受信任来简化事情。
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 2017-05-23
  • 2018-05-03
  • 2011-12-12
  • 2015-10-09
  • 2013-11-10
相关资源
最近更新 更多