C++ 在Linux中与casablanca/cpprest一起使用TLS客户端身份验证

C++ 在Linux中与casablanca/cpprest一起使用TLS客户端身份验证,c++,authentication,ssl,casablanca,cpprest-sdk,C++,Authentication,Ssl,Casablanca,Cpprest Sdk,我想切换到cpprest以满足REST需求,但是,在我的场景中,需要支持TLS客户端身份验证 我介绍了该库的功能,但我不确定是否有内置的对客户端身份验证的支持 有一些黑客试图获得这一功能,但目前它似乎只在Windows上运行,这对我来说不起作用,因为我的服务器在Linux上 这里的这一页介绍了Windows的一种解决方案,以及它如何在Linux版本中工作的提示,但我不确定如何进行,因为我在这方面没有什么经验 在Windows上解决TLS客户端身份验证问题 #include <Wincryp

我想切换到
cpprest
以满足
REST
需求,但是,在我的场景中,需要支持
TLS
客户端身份验证

我介绍了该库的功能,但我不确定是否有内置的对客户端身份验证的支持

有一些黑客试图获得这一功能,但目前它似乎只在
Windows
上运行,这对我来说不起作用,因为我的服务器在
Linux

这里的这一页介绍了Windows的一种解决方案,以及它如何在
Linux
版本中工作的提示,但我不确定如何进行,因为我在这方面没有什么经验

Windows上解决
TLS
客户端身份验证问题

#include <Wincrypt.h>

std::vector<uint8_t>  pkcs12_data; // "... your client certificate PKCS#12 with private key goes here ...";
utility::string_t     password = "pkcs12_password"; 

web::http::client::http_client_config cfg;
cfg.set_nativehandle_options([=] (web::http::client::native_handle h) {
    CRYPT_DATA_BLOB data;
    data.cbData           = pkcs12_data.size();
    data.pbData           = reinterpret_cast<BYTE *>(pkcs12_data.data());
    HCERTSTORE hCertStore = PFXImportCertStore(&data, password.c_str(), 0);

    PCCERT_CONTEXT hContext = CertFindCertificateInStore(
        hCertStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_ANY,
        NULL, NULL);

    WinHttpSetOption(h, WINHTTP_OPTION_CLIENT_CERT_CONTEXT, 
                     (LPVOID)hContext, sizeof(CERT_CONTEXT));
});

web::http::client::http_client http_client(PS("https://secure.com"), cfg);
#包括
std::矢量pkcs12_数据;//“…您的客户端证书PKCS#12和私钥放在这里…”;
实用工具::string\u t password=“pkcs12\u password”;
web::http::client::http\u client\u config cfg;
cfg.set_nativehandle_选项([=](web::http::client::native_handle h){
加密数据块数据;
data.cbData=pkcs12_data.size();
data.pbData=reinterpret_cast(pkcs12_data.data());
HCERTSTORE HCERTSTORE=PFXImportCertStore(&data,password.c_str(),0);
PCCERT_CONTEXT hContext=CertFindCertificateInstaller(
hCertStore,X509 ASN编码,PKCS 7 ASN编码,0,证书查找,
空,空);
WinHttpSetOption(h,WINHTTP\u选项\u客户端\u证书\u上下文,
(LPVOID)hContext,sizeof(CERT_CONTEXT));
});
web::http::client::http_客户端http_客户端(PS)https://secure.com(cfg),;