【问题标题】:cpp-httplib https server not working on Linuxcpp-httplib https 服务器无法在 Linux 上运行
【发布时间】:2021-11-19 22:55:30
【问题描述】:

我正在尝试使用 C++ 中的 cpp-httplib 创建一个在 linux 上运行的 HTTPS 服务器。 (https://github.com/yhirose/cpp-httplib) 当我使用 Windows 时一切正常。但是在 linux 上只有 HTTP 服务器可以工作。 似乎 HTTPS 服务器没有打开我不明白的端口... 在终端中键入: sudo netstat -tuplen 时,预期的端口 8080 仅在运行 HTTP 服务器时显示,而不是在运行 HTTPS 服务器时显示。 我的防火墙似乎也处于非活动状态:sudo ufw status 给出状态:非活动
也许我链接了一些错误的东西,但一切似乎都运行良好。 我是 C++ 和 Linux 的新手,所以很可能我犯了一个愚蠢的错误。 如果这很重要,我只是在 Clion 中运行此代码..

这是 HTTP 服务器的代码(按预期工作和运行):

#include <iostream>
#include "./httplib.h"

int main(void) {
    httplib::Server svr;

    svr.Get("/hi", [](const auto&, auto& res) {
        res.set_content("This is a test response", "text/plain");
    });

    std::cout << "start server..." << std::endl;
    svr.listen("192.158.1.38", 8080);


    std::cin.get();
}

这是 HTTPS 服务器的代码(正在运行但未打开端口):


#pragma comment (lib, "crypt32")

#define CPPHTTPLIB_OPENSSL_SUPPORT
#include <iostream>
#include "./httplib.h"


// These are shown by Clion that they are not used...
#include </usr/include/openssl/conf.h>
#include </usr/include/openssl/evp.h>
#include </usr/include/openssl/err.h>

int main(void) {

    /// behind svr there have to be keys can not be self signed keys like in 
    httplib::SSLServer svr("./keys/localhost.crt", "./keys/localhost.key");


    svr.Get("/hi", [](const auto&, auto& res) {
        res.set_header("Access-Control-Allow-Origin", "*");
        res.set_content("This is a test response", "text/plain");

    });



    std::cout << "start server..." << std::endl;
    svr.listen("192.158.1.38", 8080);


    std::cin.get();

}

我的 CMakeLists.txt 如下所示:

cmake_minimum_required(VERSION 3.20)
project(TLS_Server)

set(CMAKE_CXX_STANDARD 17)

add_executable(TLS_Server main.cpp)


find_package(OpenSSL REQUIRED)


find_package(Threads REQUIRED)
target_link_libraries(TLS_Server PRIVATE OpenSSL::SSL PRIVATE Threads::Threads)

【问题讨论】:

  • 需要检查的是 SSL 证书的位置以及您的应用程序是否正在找到它们。您需要获取结果代码并查看库告诉您的问题。请参阅您正在使用的 GitHub 存储库中 README.md 文件的错误代码部分。
  • 非常感谢。我现在已经给出了证书的绝对路径,它可以工作了。

标签: c++ linux server openssl


【解决方案1】:

好的,正如 cmets 中提到的,问题是找不到证书。我现在已经给出了绝对路径,它工作正常。 谢谢!

PS:正如我所说:“可能是一个愚蠢的错误”..

【讨论】:

  • 很高兴听到它成功了。您如何确定问题是找不到证书?你能否提供更多关于你是如何解决这个问题的细节?
  • 在阅读了您的评论后,我刚刚给出了证书的全局路径并且它有效。端口打开,我通过浏览器连接到服务器。我没有通过记录错误消息来确定问题。
猜你喜欢
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 2020-01-18
  • 2018-10-14
  • 1970-01-01
相关资源
最近更新 更多