异常运行提升asio ssl的例子

Sho*_*ast 19 c++ linux ssl boost boost-asio

我正在尝试从boost :: asio运行SSL示例,当我运行它时,我得到一个"无效参数"异常.我在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
Run Code Online (Sandbox Code Playgroud)

运行如下:

$ ./server 
Usage: server <port>
$ ./server 10000
Exception: Invalid argument
$ ./server 1000
Exception: Permission denied
$ sudo ./server 1000
Exception: Invalid argument
Run Code Online (Sandbox Code Playgroud)

不确定是什么问题:(任何帮助将不胜感激.

谢谢!

Sho*_*ast 46

好的,对于将来发现这一点的人,您需要创建证书并对其进行适当的签名.以下是linux的命令:

//生成私钥

openssl genrsa -des3 -out server.key 1024
Run Code Online (Sandbox Code Playgroud)

//生成证书签名请求

openssl req -new -key server.key -out server.csr
Run Code Online (Sandbox Code Playgroud)

//使用私钥签名证书

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
Run Code Online (Sandbox Code Playgroud)

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

cp server.key server.key.secure
openssl rsa -in server.key.secure -out server.key
Run Code Online (Sandbox Code Playgroud)

//生成dhparam文件

openssl dhparam -out dh512.pem 512
Run Code Online (Sandbox Code Playgroud)

完成后,您需要更改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");
Run Code Online (Sandbox Code Playgroud)

client.cpp

ctx.load_verify_file("server.crt");
Run Code Online (Sandbox Code Playgroud)

那应该都行不通!

  • 我留下这个评论,因为有人会像我一样面对错误信息.(握手失败:asio.ssl:336077172).这意味着(握手失败:dh键太小).你可以在error.message()中检查这条消息; 这是因为dh512.pem.512位太小了.最近限制改变了,我们应该使用超过512位.> openssl dhparam -out dh1024.pem 1024 (5认同)