使用boost :: asio(pion库)的https服务器抱怨“没有共享密码”

时间:2014-08-16 19:17:34

标签: 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生成证书对的解决方案然后在服务器/客户端加载这些证书对,但我的客户端应用程序是Web浏览器,浏览器不会使用这些生成的证书。

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:2)

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

m_server->set_ssl_key_file(pem_filename);

其中pem_filename是包含SSL证书和密钥的PEM格式文件的名称。密钥不得加密。如果您还没有来自可信证书颁发机构的证书,那么有许多互联网教程可以告诉您如何创建自签名证书。如果您在单独的文件中有密钥和证书,那么只需将它们连接成一个文件即可。

客户端(在本例中)不需要事先的证书/密钥配置,但请注意,使用自签名证书(或未由受信任的证书颁发机构签名的任何证书)将在大多数Web上生成安全警告浏览器。