linux - 使用 ECDSA 证书问题 boost asio

标签 linux boost ssl openssl boost-asio

我正在使用 boost::asio 实现 SSL 服务器。

上下文初始化如下代码所示

    boost::asio::ssl::context_base::method SSL_version =
            static_cast<boost::asio::ssl::context_base::method>(param_values[ID_PROTOCOL_VERSION].int32_value);

    // load certificate files
    boost::shared_ptr<boost::asio::ssl::context> context_ = boost::shared_ptr<boost::asio::ssl::context>(
            new boost::asio::ssl::context(SSL_version));     
    p_ctx = boost::static_pointer_cast<void>(context_);

    context_->set_options(boost::asio::ssl::context::default_workarounds);

    context_->use_certificate_chain_file(cert_chain_file);
    context_->use_certificate_file(cert_file, boost::asio::ssl::context::pem);
    context_->use_private_key_file(cert_file, boost::asio::ssl::context::pem);

    context_->set_verify_mode(boost::asio::ssl::verify_peer | boost::asio::ssl::verify_fail_if_no_peer_cert);
    context_->set_verify_callback(boost::bind(&verify_certificate_cb, _1, _2));

    if (param_values[ID_CIPHER_LIST].int32_value != 0)
    {
        std::string cipher_list = "";
        generate_cipher_list(param_values[ID_CIPHER_LIST].int32_value, cipher_list);
        MA5G_logger::log(PRIORITY_INFO, "Supported cipher list %s", cipher_list.c_str());
        SSL_CTX_set_cipher_list((reinterpret_cast<boost::asio::ssl::context*>(p_ctx.get()))->native_handle(),
                cipher_list.c_str());
    }

cipher_list中,我支持下面的列表

AES128-SHA:AES256-SHA:AES128-SHA256:AES256-SHA256:AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA

使用 ECDSA 证书,如果我使用上面给出的 cipher_list,则客户端无法连接到服务器并给出错误 “No shared cipher”。但是,如果我不提供 cipher_list,则客户端可以成功连接到服务器。相同的密码列表适用于 RSA 证书。

如果我将 openssl s_server-cipher 选项一起使用以提供支持的 cipher_list,则相同的 ECDSA 证书工作正常>

谁能帮忙解决这个问题?

最佳答案

不抱歉,伙计,经过大量研究我找到了答案。

问题出在密码列表上,而不是代码/证书上。

同一证书使用 ECDHE-ECDSA-AES256-SHA 密码和 openssl 客户端服务器,同时使用 ECDH-ECDSA-AES256-SHA 密码用于 boost asio SSL 客户端-服务器。

无论如何感谢@rkyser 的帮助!

关于linux - 使用 ECDSA 证书问题 boost asio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18929049/

相关文章:

c++ - std::vector::erase()(多线程) 'Assertion ` px != 0' failed.'

C++线程秒表

security - 接受表格中的银行帐户信息

windows - 如何使用批处理文件生成 SSL

linux - 脚本在 Bash 和 cron 执行时产生不同的结果

linux - 强制 MongoDB 预取内存

c++ - 需要帮助使用 Boost Property Tree 库和 XML 递归创建目录树

asp.net - 即使数据不敏感,我是否需要在用户登录后保持 HTTPS (SSL) 状态?

c - 显示在给定地址 gdb 找到的值

linux - 使用命令行工具合并两个音频文件