SSL内加密任意TCP连接,怎么玩?

2019-05-0514:15:26计算机网络技术Comments2,757 views字数 1216阅读模式

大多数有网络意识的程序都应该使用密码术保护数据,以免数据被偷窥,但许多程序都没有这样做,可能是因为程序本身是旧应用程序,或者因为安全套接字层(Secure SocketsLayer,SSL)很难加入到应用程序中。Stunnel 是一种程序,使程序员和系统管理员可以很轻松地对任意 TCP 会话加密。您可以很轻松地在客户机和服务器上启用 SSL — 而且这样做不会影响程序源代码。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

SSL 挑战
在大多数开发环境中,并不是在产品的整个生命周期中都考虑安全性而是在出现安全性问题后才采取补救措施。从传统的观点来看,这是坏事 — 事后亡羊补牢很困难,就象向一个写得马马虎虎的软件添加一个可靠性模块来除去错误一样困难。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

象这些亡羊补牢技术从安全性立场来看好像是可行的,但实际上不太可靠。例如,您可以写一段代码,建立网络连接,然后连接到一个库 — 该库用执行加密和认证的版本代替所有的传统网络调用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

实际上,这种集成的容易性是安全套接字层,或称为 SSL(用于 secure HTTP 连接的协议)的最初目的之一。SSL 的几种实现已经在试图顺便替代标准 Berkeley UNIX socket API,或者带有尽可能相似接口的库。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

OpenSSL 库(请参阅参考资料)是尝试后一种方法的一个很好的示例。在 OpenSSL 库中,相似的 API 模仿传统的套接字调用,使用 SSL 上下文对象代替文件描述符。例如,传统的写入套接字的调用具有以下特征:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

/* Returns the number of characters successfullywritten */文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

size_t write(int file_descriptor, void *buf, size_t len)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

OpenSSL 更改每个参数的类型,但每个参数的语义不变:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

/* Returns the number of characters successfullywritten */文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

int SSL_write(SSL *socket_info, char *buf, int len)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

实际上,除 SSL 对象之外,其它所有的类型与初始调用都是兼容的。理想情况下,开发者能够对程序进行较小的修改,只需添加一些代码从文件描述符初始化 SSL 上下文即可。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

而事实上,SSL 库都不容易使用。例如,开发者要写许多附加代码才能使 OpenSSL 在多线程环境下工作。实际上,为将这个库集成到代码中去,大多数开发组织花费的精力都比他们预计的要多的多,而结果还常常是一片混乱。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

Stunnel
幸运的是,有一种方法可以将加密功能无缝添加到网络连接中,而不会将您原来的代码段基址搞乱。Stunnel 是一个程序,可以使用 OpenSSL 库对任意 TCP 会话进行加密。它作为服务器运行在程序外部。Stunnel 服务器主要执行两个功能:一,首先,接收未加密的数据流,进行 SSL 加密,然后将其通过网络发送;二,对已进行 SSL 加密的数据流进行解密,并将其通过网络发送给另一个程序(该程序通常驻留在同一机器上,以避免本地网络上的窥探攻击)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/11675.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/wangluo/11675.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定