Exception running boost asio ssl example
我正在尝试从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
编译:
1 2 | g++ server.cpp -o server -lboost_system -lssl g++ client.cpp -o client -lboost_system -lssl |
运行像:
1 2 3 4 5 6 7 8 | $ ./server Usage: server <port> $ ./server 10000 Exception: Invalid argument $ ./server 1000 Exception: Permission denied $ sudo ./server 1000 Exception: Invalid argument |
不确定是什么问题 :(
任何帮助将不胜感激。
谢谢!
好的,对于以后发现此问题的任何人,您都需要创建证书并对其进行适当的签名。
这是Linux的命令:
//生成私钥
1 | openssl genrsa -des3 -out server.key 1024 |
//生成证书签名请求
1 | openssl req -new -key server.key -out server.csr |
//用私钥签名证书
1 | openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt |
//删除密码要求(例如,需要)
1 2 | cp server.key server.key.secure openssl rsa -in server.key.secure -out server.key |
//生成dhparam文件
1 | openssl dhparam -out dh512.pem 512 |
完成此操作后,您需要更改server.cpp和client.cpp中的文件名。
server.cpp
1 2 3 | 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
1 | ctx.load_verify_file("server.crt"); |
然后,它应该一切正常!
使用strace再次执行测试,以查看哪个syscall获得
1 2 3 | 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"); |
之所以得到