首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows Http Server API HTTPS服务器

Windows Http Server API HTTPS服务器
EN

Stack Overflow用户
提问于 2017-09-04 14:29:33
回答 1查看 1.8K关注 0票数 2

我想在c++中用安装一个HTTPS,我使用了示例代码,它可以很好地使用HTTPS,但是我无法使它与HTTPS一起工作。

(我不希望客户端SSL (我只希望它是HTTPS ))

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

我试着使用"HttpSetServiceConfiguration HTTP_SERVICE_CONFIG_SSL_SET“,这里是我的尝试:

代码语言:javascript
运行
复制
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());
}

但是,当我运行代码get :87时,这是一个糟糕的参数错误,但对我来说,参数缝得很好。

在这个网页上,提到句柄必须是零:(保留ServiceHandle)。肯定是零。)

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

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

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

但是我做不到,因为我得到了错误1312:(我的应用程序很糟糕,但我不知道如何为我的visual studio c++ .exe获取它)指定的登录会话不存在。它可能已经被终止了。

我试着用"https://localhost:50001/“作为网址。

我怎样才能用c++ "HttpSetServiceConfiguration“或netsh正确地做这件事呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-26 12:16:01

嗯,我发现我错误地使用了HttpInitialize(Version,Flags,pReserved)函数,我只给了它'HTTP_INITIALIZE_SERVER‘,而我也应该添加’HTTP_INITIALIZE_CONFIG‘,所以这是主要的问题,尽管很难从错误代码87中找出它。

原件:

代码语言:javascript
运行
复制
HttpInitialize(HTTPAPI_VERSION_1, HTTP_INITIALIZE_SERVER, nullptr);

固定:

代码语言:javascript
运行
复制
HttpInitialize(HTTPAPI_VERSION_1, HTTP_INITIALIZE_CONFIG | HTTP_INITIALIZE_SERVER, nullptr);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46039203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档