我使用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浏览器,浏览器不会使用这些生成的证书。
有什么想法吗?
感谢。
答案 0 :(得分:2)
您需要提供SSL证书和服务器用于协商安全连接的密钥。这将通过以下方式完成:
m_server->set_ssl_key_file(pem_filename);
其中pem_filename
是包含SSL证书和密钥的PEM格式文件的名称。密钥不得加密。如果您还没有来自可信证书颁发机构的证书,那么有许多互联网教程可以告诉您如何创建自签名证书。如果您在单独的文件中有密钥和证书,那么只需将它们连接成一个文件即可。
客户端(在本例中)不需要事先的证书/密钥配置,但请注意,使用自签名证书(或未由受信任的证书颁发机构签名的任何证书)将在大多数Web上生成安全警告浏览器。