登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> clq站长各处正式文章收集勘误 >> 主题: OpenSSL解惑1:原理[原百家号文章]     [回主站]     [分站链接]
OpenSSL解惑1:原理[原百家号文章]
浏览(289 + ) 作者: clq  发表于 2022-06-26 21:52:33   编辑 关键字:

OpenSSL解惑1:原理
2022-06-26 21:50


在前面多篇的电子邮件文章中,渐渐的要说到安全传输模式下的 smtp 发送过程。这部分功能我早就实现过,不过当年用的是 delphi, 有 indy 控件来封装了 ssl 的操作。而现在要直接使用 openssl 发现实际上有很多没有注意到的细节会对程序产生巨大的影响。openssl 的入门示例比较简单,但细节没处理好的话实际上是不实用的。所以有必要单独拿出来进行讲解。

要了解 openssl 的设计就要知道 socket 安全传输标准的原理。首先要说的是现在的 socket 安全传输标准有 SSL(Secure Sockets Layer) v1、v2、v3 三个版本外加 TLS(Transport Layer Security Protocol)v1就是一共四个版本。其中 TLS 可以认为是 SSL 的 v3 版本的标准化,它又细分为 1.0、1.1、1.2 版本。在某些环境里中, TLS 还会表示为 ssl 3.1 ,据说是为了表示它是比 ssl v3 更高的版本。这些版本互相并不完全兼容,比如最近爆火的微信小程序,开发过的程序员一定碰到过 TLS 要求大于等于 1.2 的情况,使用 windows 2003 server 自带的 iis 是必须升级,小程序才能正常连接。具体的原因就是安全传输标准升级了,而 windows 2003 的 https 标准支持太低了,而 https 不过是基于 ssl/tls 的 http 实现罢了。

不论是哪一个版本的安全传输协议,它们的原理其实都是一样的,就是对底层的 socket 的 recv/send 函数收发内容进行加密而已。而这种加密也没什么希奇的,不过是把 recv/send 函数中的 buf 缓冲数据部分用 des 或者 aes 等常见的加密算法进行加密而已,本质上和我们自己定义一个密码然后用这些算法加密是一样的。破解难度实际上也一样。大家可能很吃惊,但事实就是如此一点也不希奇,安全传输协议不过是"协议"了怎样产生和告诉客户端这个密码而已。假如我们自己每隔一段时间换掉密码,然后密码通过电话而不是网络传输的话,那安全性就会高过 https ... 你相信吗? 但事实上就是如此。正因为协议基本上只是协商这个加密密码而已,所以可以很方便的在这上面实现原有 http/email 等通讯协议,这些协议只要换用 ssl 版本的连接函数和 recv/send 函数就可以了,其余的代码可以一模一样的移植!当然了编码过程中也还有很多要注意的,而这几个地方的替换函数和最后加密的函数就是 openssl 所做的功能了。理解了这一点,对 openssl 的使用会大有好处,对于其中产生的问题也更好理解。因为 openssl 本质上是 socket 传输,所以它的某些问题其实是和 socket 编程一样的(其实就是 socket 通讯过程造成的)。

连接的过程基本上如下图:

ssl连接过程

所以知道了原理以后,我们就可以理解对于 openssl 的调用为什么说可以封装成三个函数(连接,收取,发送)就可以了。这实际上就是 ssl 设计的思想,即对使用者隐藏掉加密过程方便已有的通讯协议使用加密信道。

好了,通过以上的说明那么我们就可以知道实际上 ssl 的关键就在于 ssl 连接过程(也就是双方确定密码的过程)。那么怎样让对方知道我们要用什么密码来进行通信呢,可以在通讯开始前告诉对方嘛。但风险是告诉密码的过程也可能被监听啊,那就不安全了。要解决这个问题可以用一个办法,我只告诉对方"一半"密码 ... 就象古代军队的虎符一样,军队和皇帝各有一半,只有合在一起时才能调用军队。而非对称密码算法(例如RSA)就象是为这个需求而生的,简直一模一样嘛(不了解RSA的网友自行百度一下吧)。这也是为什么 openssl 中包含了 rsa 算法实现的原因,也是为什么讲解 rsa 算法的教程中一般最后都会给出一个 openssl 调用示例的原因。

好了,这另一半的虎符就是所谓的公钥或私钥,也就是所谓的 https 站点需要申请的所谓证书。之所以要申请证书,是因为所有的浏览器都默认带有一些大公司已经做好的一部分虎符,可以理解为 https 需要两部分虎符:浏览器自带一个,网站上一个。而没有证书的网站不安全的原因之一就是这个证书浏览器没带有,那就要在第一次通讯时传输这个证书,就存在被截取的可能(如果不是第一次去,这个危险实际也并不是很高)。所以开发过 ios 的程序员都知道还有种做法就是先给手机装上自己的证书,这样就能避免不安全提示了。一定有网友已经发现了两个很重要的问题:那自已装的证书岂不是更安全!是这样的,要不你以为银行U盾是干什么用的;更严重的问题是如果那个发证书的机构不靠谱或者是做手脚岂不是大大的危险!那可不,要不你以为最近好几个机构被浏览器开发商抛弃是为什么。还有,据说前几年美国制裁俄罗斯时就对俄罗斯的银行证书停止支持,导致了重大的损失。是不是事实我就不知道了,不过这在事实上确实是可以做到的。所以使用认证机构颁发认可的 https 证书这个东西对国家安全来说反而不是什么好事!

好的,原理我们就说到这,希望大家又学到了一些东西。


总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1