Как программно получить RootCA на Linux? - PullRequest
0 голосов
/ 25 марта 2020

Я написал код ниже для получения root центра сертификации на Windows. Этот код сделан для UE4, но я считаю, что он все еще понятен (пожалуйста, дайте мне знать, если нет).

bool GetRootCertificatesImpl(FString& OutCertificates)
{
    HCERTSTORE StoreHandle = CertOpenSystemStoreW(0, L"ROOT");
    if (!StoreHandle)
    {
        UE_LOG(LogCertStore, Error, TEXT("Error opening system store. %s failed."), TEXT("CertOpenSystemStoreA"));
        return false;
    }

    PCCERT_CONTEXT ContextPointer = nullptr;
    while ((ContextPointer = CertEnumCertificatesInStore(StoreHandle, ContextPointer)) != NULL)
    {
        DWORD StringWithHeaderLength = 0;
        const BOOL Ret_ComputeSize =
            CryptBinaryToStringW(ContextPointer->pbCertEncoded, ContextPointer->cbCertEncoded, CRYPT_STRING_BASE64HEADER, nullptr, &StringWithHeaderLength);

        if (Ret_ComputeSize == TRUE)
        {
            UE_LOG(LogCertStore, Error, TEXT("%s() returned FALSE for prepass"), TEXT("CryptBinaryToStringW"));

            return false;
        }

        LPWSTR StringBuffer = (LPWSTR) FMemory::Malloc(StringWithHeaderLength * sizeof(WCHAR));

        if (StringBuffer == nullptr)
        {
            return false;
        }

        const BOOL Ret_WriteString = CryptBinaryToStringW(
            ContextPointer->pbCertEncoded, ContextPointer->cbCertEncoded, CRYPT_STRING_BASE64HEADER, StringBuffer, &StringWithHeaderLength);

        if (Ret_WriteString != TRUE)
        {
            FMemory::Free(StringBuffer);
            UE_LOG(LogCertStore, Error, TEXT("%s() returned FALSE for conversion"), TEXT("CryptBinaryToStringW"));

            return false;
        }

        OutCertificates.Append(StringBuffer, StringWithHeaderLength);
        OutCertificates.Append(LINE_TERMINATOR);

        FMemory::Free(StringBuffer);
    }

    CertFreeCertificateContext(ContextPointer);
    CertCloseStore(StoreHandle, 0);

    return true;
}

Как я могу получить этот root центр сертификации в формате PEM на Linux? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...