ssl - 如何在带有 SSL 的 Mongoose 嵌入式 Web 服务器上使用 http websocket?

标签 ssl mongoose websocket ssl-certificate mongoose-web-server

我正在尝试在带有 SSL 的 Mongoose 嵌入式 Web 服务器上使用 Http WebSocket。

我尝试了这个名为“simplest_web_server_ssl”的 Mongoose 示例。
但是当我执行程序时,它会在下面打印出这条消息。

“创建监听器失败: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;
}

最佳答案

我有同样的问题。您可以使用 gdb 或类似工具进入 mongoose 以查找该错误消息的实际原因。如果您认为 mongoose 没有找到您的文件,请尝试使用绝对路径。如果它找到该文件,您可能需要在您的计算机上重新生成(和/或注册)证书文件。

关于ssl - 如何在带有 SSL 的 Mongoose 嵌入式 Web 服务器上使用 http websocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643171/

相关文章:

Java SSL : how to disable hostname verification

amazon-web-services - AWS Application Load Balancer 是否支持 TLS 1.3?

ruby - 从 Ruby 连接到适用于 Windows Phone 8 的 Microsoft 推送通知服务

mongodb - NestJS with mongoose schema, interface and dto approach 问题

php - 当新行添加到数据库时,Twitter 喜欢更新

Maven Tomcat 插件上的 SSL 配置

javascript - Promise.map 未完成,因为后续 Promise.join 先完成?都答应吗?

Node.js MongoDB - 如何使用 Mongoose 更新多个文档?

node.js - Node.js 中的 Websocket 连接在发送时关闭

node.js - 尝试通过 npm 在 NodeJS 中安装 websocket 模块时出错