Невозможно загрузить .pem из файла ресурсов в macOS - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть простой метод, который загружает сертификат pem из файла ресурсов:

    /// <summary>
    /// Helper method to load a .pem and return it as a X509Certificate2
    /// </summary>
    private static X509Certificate2 GetX509Certificate2(string path)
    {
        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(path))
        {
            byte[] data = new byte[stream.Length];
            stream.Read(data, 0, (int)stream.Length);
            return new X509Certificate2(data);
        }
    }

Он отлично работает в Windows и Ubuntu, но не работает в macOS со следующим:

Interop + AppleCrypto + AppleCommonCryptoCryptographicException: неизвестный формат при импорте.

Я пытался использовать перегрузку Span<byte>, но безрезультатно.

У кого-нибудь есть идеи / работы?вокруг?

Спасибо

1 Ответ

0 голосов
/ 09 февраля 2019

Я разместил тикет с командой corefx здесь (который я сейчас закрыл): https://github.com/dotnet/corefx/issues/35163

Исключение вызвал файл, фактически содержащий цепочку сертификатов (он содержал несколько -----END CERTIFICATE----- маркеров) - лежащая в основе Interop не поддерживает это в macOS.

По-видимому, Windows также использует только первый, с которым сталкивается, поэтому решение состояло в том, чтобы просто прочитать достаточно байтов из потока, пока этот маркер не будет достигнут(хотя нет причины, по которой вся цепочка не может быть извлечена как коллекция X509Certificate2).

Как ни странно, файл, который я имел в моей сборке (который содержал цепочку сертификатов), отличается от файлаЯ ссылался на выше ... Мои благодарности и извинения @bartonjs, поскольку это не помогло бы!

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