使用证书的客户端-服务器身份验证 - C++

问题描述

我对身份验证很陌生。在过去的一周左右的时间里,我一直在尝试阅读一些东西,但这一切都让人不知所措。我在 C++ 中有一个客户端,在 .NET 中有一个服务器。客户端使用 REST (cpprestsdk) 与服务器通信。到今天为止,这就是我的沟通方式:

    client::http_client_config config;

    auto func = [&](const client::native_handle handle)
    {
        DWORD tlsprotocol{ WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 };
        WinHttpSetoption(handle,WINHTTP_OPTION_SECURE_PROTOCOLS,&tlsprotocol,sizeof(tlsprotocol)))
    };

    config.set_nativesessionhandle_options(func);

    auto response = client::http_client(uri,config).request(methods::GET,params).get();

我需要使用在服务器上验证的客户端证书添加身份验证层。我一直很难弄清楚,但这是我在阅读一些书后所得到的:

    client::http_client_config config;

    auto func = [&](const client::native_handle handle)
    {
        PCCERT_CONTEXT pccertContext = getCertificateContext();

        WinHttpSetoption(handle,WINHTTP_OPTION_CLIENT_CERT_CONTEXT,(LPVOID)pccertContext,sizeof(CERT_CONTEXT));
    };

    config.set_nativehandle_options(func);

    auto response = client::http_client(uri,params).get();

我有几个问题:

  1. 使用这种方法,我无法建立 TLS 1.2 连接并依赖于为平台配置的任何认值(我希望是 TLS 1.2)。有没有办法保留 TLS 1.2 并发送客户端证书?
  2. 最重要的问题 - 这会起作用吗?这是我对服务器如何执行验证的想法:
    X509Certificate2 cert = Request.GetClientCertificate();
    CertUtility.validate(cert); // Some utility function to validate based on subject name,CA,etc

这看起来合理吗?如果没有,我错过了什么?非常感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)