前言
首先我们假设是直接使用 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)信任该证书
- 新建一个文件 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模式,然后在安装到电脑即可,随后必须要清理浏览器缓存
即可。