财商书苑
全民财商训练提升,认真负责我们的每句话

在两个Socat间使用SSL进行安全传输

在两个Socat间使用SSL进行安全传输

简介

当你想要在不同的机器上用socat进行数据传输,并且要避免未被授权的程序存取,嗅探,数据伪造等等。你可能需要加密这个交互过程。

为了解决这个问题,socat集成了 OpenSSL 链接库,并提供客户端和服务端的SSL功能。

SSL 是一个复杂的协议,它的功能不仅仅用来保护单一的连接。在该文档中,我们提供了一个满足基本安全需求的简单方案。

socat中配置 OpenSSL

这个章节演示了在socat中怎么配置SSL地址。为了方便,在以下文档中我们使用自己生成的签名证书。

我们假设有一个服务器主机,地址为 server.domain.org。 并且服务程序使用4433端口。为了尽可能的简单,我们使用一个非常简单的服务功能,即服务端仅回显数据(echo),客户端只进行标准输入(stdio)。

生成服务端的证书

请在一台可信的主机上执行以下步骤,可以是客户机或服务器。但机器上必须已经安装了OpenSSL程序。

为服务端的证书取一个基本的名字:

生成公钥私钥对:

生成一个自签名的证书:

会提示你输入国家代号、姓名等,或者按下回车键跳过输入提示。

用刚生成的密钥文件和证书文件来生成PEM文件:

私钥文件应保密存放,因此修改它们的权限。

使用USB存储棒或者SSH这样的安全通道,把server.pem文件放到服务器上,例如放到 $HOME/etc/ 目录下。

复制信任的证书(server.crt)到SSL客户端主机,例如放到 $HOME/etc/目录下。 此时就可以不使用安全通道,文件权限也不必非常严格。

生成客户端证书

首先为客户端证书取一个不同的文件名:

重复上述生成证书的流程。然后复制 client.pem 到SSL客户端,复制client.crt到服务端。

译者注:至此完成了证书交换,服务端有[server.pem client.crt]两个文件,客户端有[client.pem server.crt]两个文件。

OpenSSL 服务

在服务端我们不再用tcp-listen(tcp-l)地址,而用openssl-listen(ssl-l),cert=… 告诉socat包含证书和私钥的文件,cafile=… 指向客户端的证书文件;如果客户端能提供相关联的私钥,我们则认为该连接是可靠的(OpensSSL 会自动为我们处理):

运行这个命令后,socat会在4433端口监听,并要求客户端进行身份验证。

OpenSSL 客户端

用openssl-connect或者ssl替换你的tcp-connect或tcp地址关键字,然后添加cert和cafile选项:

这个命令用来建立一个到服务程序的安全的连接。

TCP/IP 6版本

如果会话使用的是IPv6网络,上述命令应该进行以下修改,假设ip6name.domain.org 是服务器的 IPv6 对应的域名。

服务端:

客户端:

故障排除:

测试 OpenSSL 集成

如果你得到类似以下信息:

… E unknown device/address “openssl-listen”

你的 socat 程序很有可能没有集成OpenSSL链接库。检查socat编译时是否支持OpenSSL可以用以下命令:

正确输出: #define WITH_OPENSSL 1

错误输出: #undef WITH_OPENSSL

若为后者,请确认你已经安装了OpenSSL和它的开发包(包括文件),然后检查运行配置脚本。

中英对照文档下载:socat-ssl-cn-en

中文文档下载:socat ssl-cn

P.S. 如果您发现译文中有不当之处,请联系我 admin@tcshare.org

 

赞(0)
未经允许不得转载:财商书苑-全民财商训练提升 » 在两个Socat间使用SSL进行安全传输

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址