Boost的ASIO + SSL在某些情况下不起作用

时间:2012-02-23 10:48:25

标签: c++ openssl boost-asio

使用Boost的ASIO(Boost v.1.48)+ OpenSSL(v.1.0.0d)编写了一个客户端/服务器应用程序。完整的OpenSSL(动态/静态库和二进制文件)是自定义构建的,构建后的测试正确传递,它静态链接到客户端和服务器。 ASIO代码在异步模式下工作。所有ASIO的SSL上下文都使用

boost::asio::ssl::context::sslv23
方法。问题描述如下。

配置0

服务器:在Win7 Prof SP1(Comp0)下运行。它使用自签名私钥(PK0)和由上面提到的自定义构建的OpenSSL二进制文件生成的公共证书(PC0)。服务器具有无限超时。 客户端:在WinXP Prof SP3(Comp1)下工作。它使用服务器公共证书(PC0)。客户端有20秒超时。

客户端成功连接到服务器,但在SSL的握手方法(boost :: asio :: ssl :: stream :: async_handshake)中通过20秒超时关闭连接。的 FAIL

配置1

服务器和客户端都运行在相同的Win7 Prof SP1(Comp0)上,使用与配置0中相同的以太网接口和相同的PK0 / PC0。

客户端成功连接握手,发送/接收数据并关闭连接。的 SUCCESS

配置2

服务器:在Win7 Prof SP1(Comp0)下运行。它使用自签名私钥(PK1)和由自定义构建的OpenSSL二进制文件生成的公共证书(PC1),但PK1和PC1是在一年前生成的。 PK0 / PC0今天生成。所有密钥都由相同的OpenSSL二进制文件(v.1.0.0d)生成。 客户端:在WinXP Prof SP3(Comp1)下工作。它使用服务器公共证书(PC1)。

客户端成功连接握手,发送/接收数据并关闭连接。的 SUCCESS

配置3

服务器和客户端都运行在相同的Win7 Prof SP1(Comp0)上,使用与配置2中相同的以太网接口和相同的PK1 / PC1。

客户端成功连接握手,发送/接收数据并关闭连接。显然成功

将OpenSSL版本更改为最新的稳定版本(v.1.0.0g)会产生相同的结果。

问题是没有工作配置0.有没有人遇到过这样的问题?有什么想法可以解决问题吗?需要朝哪个方向去解决问题?

更新#1 。使用tlsv1方法而不是sslv23编译的代码在配置0中也不起作用。

最终更新。问题是固定的。原因是Comp1的系统日期已经过去,即将来为此计算机发布PK0 / PC0,并且OpenSSL在握手过程中失败。 PC1是针对Comp1过去发布的,它可以毫无问题地使用它。为了诊断问题,我使用了在客户端计算机上执行的以下命令:

openssl s_client -connect server_ip:server_port
,其中server_ip是服务器地址,server_port是服务器侦听端口。现在的任务是找出握手超时而不是返回错误的原因。但这是另一个故事。我希望我的帖子将来会帮助别人。

1 个答案:

答案 0 :(得分:2)

问题是解决的。原因是Comp1的系统日期已经过去,即将来为此计算机发布PK0 / PC0,并且OpenSSL在握手过程中失败。 PC1是针对Comp1过去发布的,它可以毫无问题地使用它。要诊断问题,我在客户端计算机上执行了以下命令:

openssl s_client -connect server_ip:server_port
,其中server_ip是服务器地址,server_port是服务器侦听端口。现在的任务是找出握手超时而不是返回错误的原因。但这是另一个故事。我希望我的帖子将来会帮助某人。