【问题标题】:What is the correct way to implement SSL?实现 SSL 的正确方法是什么?
【发布时间】:2018-08-12 17:58:51
【问题描述】:

我有一个烧瓶应用程序(客户端),我需要从该应用程序将一些数据发送到服务器(目前是另一个烧瓶应用程序)并获取一些相应的数据。我需要使用 REST,因为服务器可以是以后的任何东西(当前的烧瓶应用程序是用于测试的虚拟服务器)。我需要在客户端和服务器之间建立 SSL 连接。我看到 SSL 分几个步骤工作:

  1. 客户端请求加密连接。
  2. 服务器使用 SSL 证书进行响应,该证书将具有公钥。
  3. 客户端验证 SSL 证书
  4. 客户端创建私钥
  5. 客户端用公钥加密私钥并发送给服务器。
  6. 服务器对其进行解密并获取私钥。
  7. 因此在客户端和服务器之间建立了加密连接。客户端和服务器之间的进一步数据交换是通过使用私钥加密数据来实现的。

这就是我想要达到的目标。如果我的 SSL 概念有误,请纠正我。

我已经看到了下面的实现并且非常适合我。

客户端使用requests.get()verify=<path to server SSL certificate>。我已经使用openssl 为服务器生成了 SSL 证书,如下所示。

openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

但我认为这里并未涵盖上述所有 7 个步骤。实现 SSL 的实际方法是什么?任何帮助将不胜感激。

【问题讨论】:

  • 您认为缺少什么?此外,对于具有前向安全性的 TLS,该步骤列表不正确。
  • 在上面的实现方法中,客户端为每个rest调用验证服务器的证书,但我不想这样做。我想在客户端和服务器之间创建一个加密连接,然后应该加密进一步的数据交换。因此,我认为缺少客户端和服务器之间加密连接的初始创建。此外,缺少来自客户端的私钥生成。我想实现 SSL,我认为 TLS 与 SSL 不同。如果我错了,请纠正我。
  • TLS 是 SSL 的继承者,通常被称为“SSL”。您不应该使用实际的 SSL(v2 和 v3),因为它不安全。至于保持连接打开并重用它——你可以通过 HTTP keep-alive 来做到这一点。见stackoverflow.com/questions/25239650/…Secret 密钥生成也没有丢失,它只是抽象得离你很远,应该是这样。您无需了解所有实现细节或在程序中引用它们即可使用 HTTPS。
  • @EJP:没有人提到会话恢复。我链接到一个解释如何在请求库中使用 HTTP keep-alive 的答案。 (我提到的是“保持连接打开”,会话恢复不是,尽管它可能是 OP 想要的。)

标签: ssl https openssl python-requests flask-restful


【解决方案1】:
  1. 客户端请求加密连接。

正确。

  1. 服务器使用 SSL 证书进行响应,该证书将具有公钥。

正确。

  1. 客户端验证 SSL 证书

正确。

  1. 客户端创建私钥

不正确。发生这种情况已经太晚了。

  1. 客户端用公钥加密私钥并发送给服务器。

不正确。没有这样的步骤。请参阅 RFC 2246 和后续版本。

  1. 服务器对其进行解密并获取私钥。

不正确,同上。

  1. 因此在客户端和服务器之间建立了加密连接。

不正确,同上。

客户端和服务器之间的进一步数据交换通过使用私钥加密数据来实现。

不正确,同上。 TLS 通过 (1) 通过 服务器 证书和 PKI 建立信任; (2) 可选地通过客户端证书建立信任; (3) 通过密钥协商过程建立一个对称会话密钥,其中实际的会话密钥永远不会被传输。

这就是我想要达到的目标。

不,不是。您正在尝试建立 TLS 连接。它的作用与你无关。

如果我的 SSL 概念有误,请纠正我。

你完全错了。

我已使用 openssl 为服务器生成 SSL 证书,如下所示。

不,你没有。您已创建证书签名请求 (CSR)。在您得到证书颁发机构 (CA) 的签名之前,这是没有用的。它不是 SSL 证书。

在上述实现方法中,客户端会为每个 rest 调用验证服务器的证书,但我不想这样做。我想在客户端和服务器之间创建一个加密连接,然后应该加密进一步的数据交换。因此,我认为缺少客户端和服务器之间加密连接的初始创建。此外,缺少来自客户端的私钥生成。我想实现 SSL,我认为 TLS 与 SSL 不同。如果我错了,请纠正我。

你错了。 TLS 支持会话恢复,它允许简短的握手,从而消除了证书交换步骤。缺少“从客户端生成私钥”步骤,因为它不一定存在。你在猜测。

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2011-02-23
    • 2011-05-04
    • 2014-04-07
    • 1970-01-01
    相关资源
    最近更新 更多