问题描述
我对身份验证很陌生。在过去的一周左右的时间里,我一直在尝试阅读一些东西,但这一切都让人不知所措。我在 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();
我有几个问题:
- 使用这种方法,我无法建立 TLS 1.2 连接并依赖于为平台配置的任何默认值(我希望是 TLS 1.2)。有没有办法保留 TLS 1.2 并发送客户端证书?
- 最重要的问题 - 这会起作用吗?这是我对服务器如何执行验证的想法:
X509Certificate2 cert = Request.GetClientCertificate();
CertUtility.validate(cert); // Some utility function to validate based on subject name,CA,etc
这看起来合理吗?如果没有,我错过了什么?非常感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)