exception运行boost asio ssl例子

我试图从boost :: asio运行SSL示例,我得到一个“无效的参数”exception,当我运行它们。 我在Linux x86_64上。

http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/ssl/client.cpp

http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/example/ssl/server.cpp

编译:

g++ server.cpp -o server -lboost_system -lssl g++ client.cpp -o client -lboost_system -lssl 

运行如下:

 $ ./server Usage: server <port> $ ./server 10000 Exception: Invalid argument $ ./server 1000 Exception: Permission denied $ sudo ./server 1000 Exception: Invalid argument 

不知道是什么问题:(任何帮助将不胜感激。

谢谢!

Solutions Collecting From Web of "exception运行boost asio ssl例子"

好的,对于将来找到这个的人来说,你需要创建你的证书并适当地签名。 这里是Linux的命令:

//生成一个私钥

 openssl genrsa -des3 -out server.key 1024 

//生成证书签名请求

 openssl req -new -key server.key -out server.csr 

//用私钥签名证书

 openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt 

//删除密码要求(例如需要)

 cp server.key server.key.secure openssl rsa -in server.key.secure -out server.key 

//生成dhparam文件

 openssl dhparam -out dh512.pem 512 

完成之后,您需要更改server.cpp和client.cpp中的文件名。

server.cpp

 context_.use_certificate_chain_file("server.crt"); context_.use_private_key_file("server.key", boost::asio::ssl::context::pem); context_.use_tmp_dh_file("dh512.pem"); 

client.cpp

 ctx.load_verify_file("server.crt"); 

那么它应该都工作!

使用strace再次执行测试来查看哪个系统调用获得了EINVAL ,作为奖励,您将看到失败调用的参数。 这可能是安全上下文设置失败的一部分,除非你有正确的文件和数据:

 context_.use_certificate_chain_file("server.pem"); context_.use_private_key_file("server.pem", boost::asio::ssl::context::pem); context_.use_tmp_dh_file("dh512.pem"); 

您正在获取EPERM因为您尝试绑定到特权的TCP端口(其值小于1024的端口)。 这就是为什么./server 10000不能获得EPERM