【问题标题】:I am running into issues with Casablanca C++ when using urls with https in it我在使用带有 https 的 url 时遇到了 Casablanca C++ 的问题
【发布时间】:2015-08-20 22:05:24
【问题描述】:

我们正在使用Resource Owner Credentials 使用我们的内部OAuth Svr 获取访问令牌。如果网址中不包含任何 https,则一切正常,但是当我在其中包含 https 时,一切都失败了。

我们使用https 部署了所有站点:

遵循一个非常简单的失败代码。如果我在其中包含https,我不知道为什么会出现异常。

try
{
    http_client api(U("https://172.27.12.207/AuthSvr"), m_http_config);
    ucout << "Requesting account information:" << std::endl;
    ucout << "Information: " << api.request(methods::GET, U("identity/.well-known/openid-configuration")).get().extract_json().get() << std::endl;
    //TestRestAPI().wait();
}
catch (...)
{
    ucout << "Unknown Error";
}

编辑

我处理了异常以捕获web::http::http_exception,但我看到了错误:

WinHttpSendRequest: 12175: A security error occurred

【问题讨论】:

  • 你能写出你得到了什么异常吗?
  • 我处理了异常以捕获 web::http::http_exception 并且我看到错误“WinHttpSendRequest: 12175: 发生安全错误”
  • 问题出在证书验证上。由于大多数开发环境使用自签名证书,验证失败导致 HTTPS 事务失败。解决方法是禁用证书验证。
  • 将此粘贴​​为答案。

标签: c++ https casablanca


【解决方案1】:

在尝试验证自签名证书时会出现此问题。 这通常出现在没有使用有效证书但生成动态证书的开发中。

可以通过禁用验证来解决问题。

web::http::client::http_client_config config;
config.set_validate_certificates(false);

auto client = std::make_shared<web::http::client::http_client>(U("https://localhost:8081/"), config);

请绝对确保这仅在调试测试代码中完成,而不是最终产品的一部分。

【讨论】:

    【解决方案2】:

    // 创建一个 HTTP 请求句柄。 shRequest = WinHttpOpenRequest (shConnect, L"GET", L"/robots.txt", 空,WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0); //WINHTTP_FLAG_SECURE );

    在我的例子中,通过注释掉 WINHTTP_FLAG_SECURE 标志解决了类似的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 2012-05-13
      • 2015-10-01
      • 1970-01-01
      相关资源
      最近更新 更多