实施SSL的正确方法是什么?

时间:2018-03-05 06:03:32

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

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

  1. 客户端请求加密连接。
  2. 服务器使用具有公钥的SSL证书进行响应。
  3. 客户端验证SSL证书
  4. 客户端创建私钥
  5. 客户端使用公钥加密私钥并将其发送到服务器。
  6. 服务器对其进行解密并获取私钥。
  7. 因此,在客户端和服务器之间建立加密连接。通过使用私钥加密数据,可以在客户端和服务器之间进一步交换数据。
  8. 这就是我想要实现的目标。如果我的SSL概念错误,请纠正我。

    我已经看到了下面的实现,对我来说非常适合。

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

    openssl

    但我不认为上述所有7个步骤都在这里。实施SSL的实际方式是什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

  
      
  1. 客户端请求加密连接。
  2.   

正确。

  
      
  1. 服务器使用具有公钥的SSL证书进行响应。
  2.   

正确。

  
      
  1. 客户端验证SSL证书
  2.   

正确。

  
      
  1. 客户端创建私钥
  2.   

不正确的。现在已经太晚了。

  
      
  1. 客户端使用公钥加密私钥并将其发送到服务器。
  2.   

不正确的。没有这样的步骤。请参阅RFC 2246和后继者。

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

不正确,同上。

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

不正确,同上。

  

通过使用私钥加密数据,可以在客户端和服务器之间进一步交换数据。

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

  

这就是我想要实现的目标。

不,不是。您正在尝试建立TLS连接。它的作用实际上很少引起你的关注。

  

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

你完全错了。

  

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

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

  

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

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