自学内容网 自学内容网

[C++] cpphttplib使用https而不是http

前言

首先我们假设是直接使用 httplib.h 的源文件。

支持 https

在这里插入图片描述
根据readme来看,需要开启一个宏,链接libssl和libcrypto就可以了。

下载openssl

保姆级OpenSSL下载及安装教程 选择非light的版本,这样才会有头文件和lib库引入文件。
编写CMakeLists.txt狠狠的链接一下库文件和引入头文件包含目录(本文只是简单测试一下)

target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE "C:/Program Files/OpenSSL-Win64/include")
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE "C:/Program Files/OpenSSL-Win64/lib/VC/x64/MDd")
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE libcrypto.lib libssl.lib)

生成私匙和证书

什么是 .pem 文件?在 SSL 中导航其创建、使用和转换
注意在生成证书时如果需要填写信息时遇到 COMMON NAME 填写服务器的ip地址,请将私匙和证书都弄成pem格式。

int main()
{
    httplib::SSLServer server("D:/cazhengshu1/certificate.pem","D:/cazhengshu1/private.pem");
    server.Get("/image", onGetImage);
    server.Get("/index.html", onIndex);
    bool ret = server.listen("192.168.110.173", 8030);
    if(ret){
        std::cout << "bind successed" << std::endl;
    }else{
        std::cout << "bind failed" << std::endl;
    }
    return 0;
}

此时使用https就可以了,但是因为是自签名证书,其实效果比http的效果还要差,谷歌浏览器也直接阻止浏览器访问网址,就算用户选择继续访问,也有明显的标识来指出该网站是不安全的。

导出证书以及让浏览器(Google)信任该证书

  1. 新建一个文件 http.ext
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName

[ SubjectAlternativeName ]
IP.1=127.0.0.1
IP.2=192.168.199.104# 内网访问的IP地址

重新生成证书文件

openssl x509 -req -in csr.csr -signkey private.key -out certificate.pem -extfile http.ext

在代码中使用该文件
在谷歌浏览器打开网址,导出该证书以der模式,然后在安装到电脑即可,随后必须要清理浏览器缓存
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即可。

结算画面

在这里插入图片描述


原文地址:https://blog.csdn.net/qq_47500842/article/details/143608752

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!