如何在带有 SSL 的 Mongoose 嵌入式 Web 服务器上使用 http websocket?
Posted
技术标签:
【中文标题】如何在带有 SSL 的 Mongoose 嵌入式 Web 服务器上使用 http websocket?【英文标题】:How to use http websocket on Mongoose embedded web server with SSL? 【发布时间】:2017-03-07 08:06:52 【问题描述】:我正在尝试在带有 SSL 的 Mongoose 嵌入式 Web 服务器上使用 Http WebSocket。
我尝试了这个名为“simplest_web_server_ssl”的猫鼬示例。 但是当我执行程序时,它会在下面打印出这条消息。
“创建侦听器失败:SSL 证书无效”
我认为这是因为程序不知道“server.pem”文件在哪里。 我将示例文件夹中的这些“server.pem”和“server.key”文件放入创建并运行 .exe 文件的“release”文件夹中。
其实我对 Mongoose 和 SSL 还是很陌生。
请问有人可以帮助我吗?
谢谢,问候。
/*
* Copyright (c) 2016 Cesanta Software Limited
* All rights reserved
*/
/*
* This example starts an SSL web server on https://localhost:8443/
*
* Please note that the certificate used is a self-signed one and will not be
* recognised as valid. You should expect an SSL error and will need to
* explicitly allow the browser to proceed.
*/
#include "mongoose.h"
static const char *s_http_port = "8443";
static const char *s_ssl_cert = "server.pem";
static const char *s_ssl_key = "server.key";
static struct mg_serve_http_opts s_http_server_opts;
static void ev_handler(struct mg_connection *nc, int ev, void *p)
if (ev == MG_EV_HTTP_REQUEST)
mg_serve_http(nc, (struct http_message *) p, s_http_server_opts);
int main(void)
struct mg_mgr mgr;
struct mg_connection *nc;
struct mg_bind_opts bind_opts;
const char *err;
mg_mgr_init(&mgr, NULL);
memset(&bind_opts, 0, sizeof(bind_opts));
bind_opts.ssl_cert = s_ssl_cert;
bind_opts.ssl_key = s_ssl_key;
bind_opts.error_string = &err;
printf("Starting SSL server on port %s, cert from %s, key from %s\n",
s_http_port, bind_opts.ssl_cert, bind_opts.ssl_key);
nc = mg_bind_opt(&mgr, s_http_port, ev_handler, bind_opts);
if (nc == NULL)
printf("Failed to create listener: %s\n", err);
return 1;
// Set up HTTP server parameters
mg_set_protocol_http_websocket(nc);
s_http_server_opts.document_root = "."; // Serve current directory
s_http_server_opts.enable_directory_listing = "yes";
for (;;)
mg_mgr_poll(&mgr, 1000);
mg_mgr_free(&mgr);
return 0;
【问题讨论】:
【参考方案1】:我也遇到了同样的问题。您可以使用 gdb 或类似工具进入 mongoose 以查找该错误消息的实际原因。如果您认为 mongoose 没有找到您的文件,请尝试使用绝对路径。如果它找到该文件,您可能需要在您的计算机上重新生成(和/或注册)证书文件。
【讨论】:
以上是关于如何在带有 SSL 的 Mongoose 嵌入式 Web 服务器上使用 http websocket?的主要内容,如果未能解决你的问题,请参考以下文章
带有 http/2 和 ssl 的嵌入式 Tomcat 的 Spring Boot 2.1,gzip 不起作用
运行带有 SSL 和同时未加密的 Spring Boot 应用程序(嵌入式 Tomcat)
如何在保存在 Mongoose 之前检查数据库中是不是存在嵌入式文档
如何在 Mongoose 的嵌入式文档中检索数组的最后一个对象?