c++ - 使用 boost::asio(pion 库)的 https 服务器提示 "no shared cipher"

标签 c++ https boost-asio

我正在使用 pion 网络库编写 HTTP(s) 服务器,pion 是 boost::asio 的包装器。我需要服务器支持 HTTP 和 HTTPS,HTTP 完成:

#include "pion/http/server.hpp"
#include "pion/http/response_writer.hpp"
using namespace pion; 
using namespace pion::http; 

struct fake_server {  
    void start() {
        m_server = pion::http::server_ptr(new pion::http::server(80));  
        m_server->add_resource("/", boost::bind(&fake_server::handle_request, this, _1, _2));  
        m_server->start();  
    }

    void handle_request(http::request_ptr& _httpRequest, tcp::connection_ptr& _tcpConn) {
        http::response_writer_ptr writer(  
            http::response_writer::create(  
                _tcpConn,
                *_httpRequest,
                boost::bind(&tcp::connection::finish, _tcpConn)));  
        http::response& r = writer->get_response();  
        writer->write("hello world");  
        writer->send();  
    }

    pion::http::server_ptr m_server;  
};  

int main() {

    fake_server svr;
    svr.start();

    while(1) {
        Sleep(0);
    }
}

但我不知道如何处理 HTTPS,我尝试将端口设置为 443,并将 ssl 标志设置为:

    void start() {
        m_server = pion::http::server_ptr(new pion::http::server(443)); // 443
        m_server->set_ssl_flag(true); // ssl flag
        m_server->add_resource("/", boost::bind(&fake_server::handle_request, this, _1, _2));  
        m_server->start();  
    }

它不起作用,我得到一个错误“没有共享密码”,我用谷歌搜索了这个错误并找到了一些使用 openssl 生成证书对然后将这些证书对加载到服务器/客户端,但我的客户端应用程序是网络浏览器,浏览器不会使用这些生成的证书。

有什么想法吗?

谢谢。

最佳答案

您需要提供服务器将用于协商安全连接的 SSL 证书和 key 。这将通过以下方式完成:

m_server->set_ssl_key_file(pem_filename);

其中 pem_filename 是包含 SSL 证书和 key 的 PEM 格式文件的名称。 key 不得加密。有许多 Internet 教程可以告诉您如何创建自签名证书(如果您还没有来自受信任的证书颁发机构的证书)。如果您的 key 和证书位于不同的文件中,则只需将它们连接成一个文件即可。

客户端不需要预先配置证书/ key (在这种情况下),但请注意,使用自签名证书(或任何未经受信任的证书颁发机构签名的证书)将在大多数 Web 上生成安全警告浏览器。

关于c++ - 使用 boost::asio(pion 库)的 https 服务器提示 "no shared cipher",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25343105/

相关文章:

ssl - Certbot 检测到不正确的通用名称 (CN)

c++ - 在 Boost.Asio 中同时使用 SSL 套接字和非 SSL 套接字?

c++ - 如何通过预处理器定义使类可用于结构?

c++ - 用 C++ 对数字进行排序

c++ - 将静态常量对象转换为基类

node.js - 从服务器重定向时,页面从 HTTPS 重定向到 HTTP

c# - 使用 HTTPS 的 WCF session

c++ - 构造函数导致 "use of deleted function"错误

sockets - 如何设计多节点应用网络层?

c++ - 从四元数到 OpenGL 旋转