Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl EventMachine中的TLS连接如何工作?_Ssl_Eventmachine - Fatal编程技术网

Ssl EventMachine中的TLS连接如何工作?

Ssl EventMachine中的TLS连接如何工作?,ssl,eventmachine,Ssl,Eventmachine,我有一个自定义的基于Protobuf的协议,我已经实现了一个EventMachine协议,我希望通过服务器和客户端之间的安全连接来使用它。每次从客户机向服务器发送消息时,我都会在消息前面加上一个4字节的整数,表示要发送的Protobuf序列化字符串的大小,这样服务器就知道在将数据解析回Protobuf消息之前要读取多少字节 我在客户机和服务器协议处理程序中的post_init回调方法中调用start_tls,服务器处理程序中的回调方法传递服务器的私钥和证书。根据我打印出来的日志消息,在这个阶段似

我有一个自定义的基于Protobuf的协议,我已经实现了一个EventMachine协议,我希望通过服务器和客户端之间的安全连接来使用它。每次从客户机向服务器发送消息时,我都会在消息前面加上一个4字节的整数,表示要发送的Protobuf序列化字符串的大小,这样服务器就知道在将数据解析回Protobuf消息之前要读取多少字节

我在客户机和服务器协议处理程序中的
post_init
回调方法中调用
start_tls
,服务器处理程序中的回调方法传递服务器的私钥和证书。根据我打印出来的日志消息,在这个阶段似乎没有发生错误

当我开始解析服务器处理程序代码中的
receive\u data
回调中的数据时,我遇到了麻烦。。。我从线路上读取4个字节的数据并将其解包为一个整数,但解包的整数与我从客户端发送的整数不同(即,我发送17,但接收134222349)

请注意,当我不使用TLS时,这不会发生。。。如果我删除客户端和服务器代码中的
start\u tls
调用,一切都会正常工作

在使用TLS时,是否会将SSL/TLS数据传递到
receive\u data
回调?如果是,我如何知道来自客户端的数据何时开始?我似乎找不到任何讨论此用例的示例代码…

好的,因此通过与EventMachine Google组的联系,我找到了我的问题所在。从本质上讲,我试图在TLS握手完成之前将数据从客户端发送到服务器,因为我没有等到
ssl\u握手完成
回调被调用

这是我要处理的代码,以防将来有人看到这篇文章。:)

服务器端的处理程序代码:

需要“eventmachine”
类ServerHandler'server.key',:cert\u chain\u file=>'server.crt',:verify\u peer=>false
结束
def接收_数据(数据)
将“接收到的数据放入服务器:#{data}”
发送数据(数据)
结束
结束
客户端的处理程序代码:

需要“eventmachine”
类ClientHandler
启动服务器的代码:

EventMachine.run do
放置“正在启动服务器…”
EventMachine.start_服务器('127.0.0.1',45123,ServerHandler)
结束
启动客户端的代码:

EventMachine.run do
设置“启动客户端…”
EventMachine.connect('127.0.0.1',45123,ClientHandler)
结束