首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现SSL的正确方法是什么?

实现SSL的正确方法是什么?
EN

Stack Overflow用户
提问于 2018-03-05 06:03:31
回答 1查看 156关注 0票数 1

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

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

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

我已经看到了下面的实现,并完美地为我工作。

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

代码语言:javascript
复制
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

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

EN

回答 1

Stack Overflow用户

发布于 2018-03-05 09:10:01

  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支持会话恢复,它允许缩短握手,从而消除证书交换步骤。“来自客户端的私钥生成”步骤缺失,因为它不一定存在。你猜的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49104377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档