我有一个烧瓶应用程序(客户端),我需要将一些数据发送到服务器(现在是另一个烧瓶应用程序)并获取一些相应的数据。我需要使用REST,因为服务器可以是以后的任何东西(当前烧瓶应用程序是用于测试的虚拟服务器)。我需要在客户端和服务器之间建立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的实际方式是什么?任何帮助,将不胜感激。
- 客户端请求加密连接。
正确。
- 服务器使用具有公钥的SSL证书进行响应。
正确。
- 客户端验证SSL证书
正确。
- 客户端创建私钥
不正确。现在已经太晚了。
- 客户端使用公钥加密私钥并将其发送到服务器。
不正确。没有这样的步骤。请参阅RFC 2246和后继者。
- 服务器解密它并获取私钥。
不正确,同上。
- 因此,在客户端和服务器之间建立加密连接。
不正确,同上。
通过使用私钥加密数据,在客户端和服务器之间进一步交换数据。
不正确,同上。 TLS的工作原理是:(1)通过服务器证书和PKI建立信任; (2)通过客户证书可选择建立信任; (3)通过密钥协商过程建立对称会话密钥,其中永远不传输实际会话密钥。
这就是我想要实现的目标。
不,不是。您正在尝试建立TLS连接。它的作用实际上很少引起你的关注。
如果我的SSL概念错误,请纠正我。
你完全错了。
我使用openssl为服务器生成了SSL证书,如下所示。
不,你没有。您已创建证书签名请求(CSR)。在您获得证书颁发机构(CA)签名之前,这是无用的。它不是SSL证书。
在上面的实现方法中,客户端为每次休息调用验证服务器的证书,但我不想这样做。我想在客户端和服务器之间创建加密连接,然后应加密进一步的数据交换。所以,我认为缺少客户端和服务器之间的初始连接。此外,缺少客户端的私钥生成。我想实现SSL,我认为TLS与SSL不同。如果我错了,请纠正我。
你错了。 TLS支持会话恢复,允许缩短握手,这消除了证书交换步骤。缺少“从客户端生成私钥”步骤,因为它不一定存在。你在猜。