gpt4 book ai didi

c++ - Windows Http 服务器 API HTTPS 服务器

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:07 27 4
gpt4 key购买 nike

我想在 C++ 中使用 Windows Server API 设置一个 HTTPS 服务器,我使用了示例代码,它在 HTTP 上工作正常,但我就是不能让它在 HTTPS 上工作。

(我不想要客户端 SSL 我只想要一个 HTTPS )

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364640(v=vs.85).aspx

我尝试使用“HttpSetServiceConfiguration HTTP_SERVICE_CONFIG_SSL_SET”,这是我的尝试:

PHTTP_SERVICE_CONFIG_SSL_SET p_ssl_settings = new HTTP_SERVICE_CONFIG_SSL_SET();
p_ssl_settings->KeyDesc.pIpPort = new SOCKADDR();
inet_pton(AF_INET, "0.0.0.0", p_ssl_settings->KeyDesc.pIpPort);
p_ssl_settings->ParamDesc.SslHashLength = 40;
p_ssl_settings->ParamDesc.pSslHash = "dec5a1a952967a613f27dec98ab78a248cd9f782";
p_ssl_settings->ParamDesc.AppId = {0x4dbfb575, 0xe1ef, 0x4239,{0x9a, 0x1d, 0xe9, 0x4c, 0xf8, 0x4d, 0xc2, 0x2d}};
p_ssl_settings->ParamDesc.pSslCertStoreName = nullptr;
p_ssl_settings->ParamDesc.DefaultCertCheckMode = 0;
p_ssl_settings->ParamDesc.DefaultRevocationFreshnessTime = 0;
p_ssl_settings->ParamDesc.DefaultRevocationUrlRetrievalTimeout = 0;
p_ssl_settings->ParamDesc.pDefaultSslCtlIdentifier = nullptr;
p_ssl_settings->ParamDesc.pDefaultSslCtlStoreName = nullptr;
p_ssl_settings->ParamDesc.DefaultFlags = HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT;


const auto retcode = HttpSetServiceConfiguration(
hReqQueue,
HTTP_SERVICE_CONFIG_ID::HttpServiceConfigSSLCertInfo,
p_ssl_settings,
sizeof HTTP_SERVICE_CONFIG_SSL_SET,
nullptr
);

if (retcode != NO_ERROR) {
throw exception(string("HttpSetServiceConfiguration failed with " + to_string(retcode)).c_str());
}

但是当我运行代码时得到错误:87,这是错误的参数错误,但对我来说参数接缝很好。

在此网页上提到 HANDLE 必须为零:(ServiceHandle [in] 保留。必须为零。)

https://msdn.microsoft.com/en-us/library/windows/desktop/aa364503(v=vs.85).aspx

但是当我传递一个 nullptr 或一个值为零的 HANDLE 变量时,我得到错误代码“6”(句柄无效。)所以我不确定

我尝试使用“netsh http add sslcert ipport=0.0.0.0:50001 certhash=de...appid{...}

但是我做错了,因为我收到错误 1312:(我的 appid 不好,但我不知道如何为我的 visual studio c++ .exe 获取它)指定的登录 session 不存在。它可能已经终止。

我尝试使用“https://localhost:50001/”作为 URL。

如何使用 C++“HttpSetServiceConfiguration”或 netsh 正确执行此操作?

最佳答案

好吧,我发现问题是我错误地使用了 HttpInitialize(Version, Flags, pReserved) 函数,我只给它 'HTTP_INITIALIZE_SERVER' 而我应该添加 'HTTP_INITIALIZE_CONFIG' 所以这是主要问题,尽管它是仅从错误代码 87 很难弄清楚。

原文:

HttpInitialize(HTTPAPI_VERSION_1, HTTP_INITIALIZE_SERVER, nullptr);

固定:

HttpInitialize(HTTPAPI_VERSION_1, HTTP_INITIALIZE_CONFIG | HTTP_INITIALIZE_SERVER, nullptr);

关于c++ - Windows Http 服务器 API HTTPS 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46039203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com