首页 文章

异常运行提升asio ssl的例子

提问于
浏览
18

我正在尝试从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

运行如下:

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

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

谢谢!

2 回答

  • 3

    好的,对于将来发现这一点的人,您需要创建证书并对其进行适当的签名 . 以下是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");
    

    那应该都行不通!

  • 42

    使用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 的原因 .

相关问题