首页 > 解决方案 > 在 Linux 中通过 casablanca / cpprest 使用 TLS 客户端身份验证

问题描述

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

我浏览了库的功能,但我不确定是否内置了对客户端身份验证的支持。

尝试获得此功能有一些技巧,但它似乎只是Windows暂时的,这对我不起作用,因为我的服务器在Linux.

此页面https://github.com/Microsoft/cpprestsdk/issues/810描述了 Windows 的一个这样的解决方法,并暗示它如何在Linux构建中工作,但我不知道如何去做,因为我在该地区的经验很少。

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

#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);

标签: c++authenticationsslcasablancacpprest-sdk

解决方案


推荐阅读