【发布时间】:2018-08-12 17:58:51
【问题描述】:
我有一个烧瓶应用程序(客户端),我需要从该应用程序将一些数据发送到服务器(目前是另一个烧瓶应用程序)并获取一些相应的数据。我需要使用 REST,因为服务器可以是以后的任何东西(当前的烧瓶应用程序是用于测试的虚拟服务器)。我需要在客户端和服务器之间建立 SSL 连接。我看到 SSL 分几个步骤工作:
- 客户端请求加密连接。
- 服务器使用 SSL 证书进行响应,该证书将具有公钥。
- 客户端验证 SSL 证书
- 客户端创建私钥
- 客户端用公钥加密私钥并发送给服务器。
- 服务器对其进行解密并获取私钥。
- 因此在客户端和服务器之间建立了加密连接。客户端和服务器之间的进一步数据交换是通过使用私钥加密数据来实现的。
这就是我想要达到的目标。如果我的 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