. Net Core 3.1 RSA - невозможно импортировать Pkcs8PrivateKey - PullRequest
0 голосов
/ 13 марта 2020

У меня есть приложение, которое использует закрытый ключ, первоначально полученный в файле .pem. Приложение работает как контейнер docker в AWS ECS (Fargate). Содержимое закрытого ключа было перемещено в AWS хранилище параметров, чтобы избежать работы с несколькими файлами .pem.

Приведенный ниже код импортирует этот ключ и работает на моем локальном компьютере. Но CryptographicException всегда выдается в ECS с сообщением «поврежденные данные ASN1».

                string pkcs8KeyString = exchange.Pem;
                pkcs8KeyString = pkcs8KeyString.Replace("-----BEGIN PRIVATE KEY-----", string.Empty);
                pkcs8KeyString = pkcs8KeyString.Replace("-----END PRIVATE KEY-----", string.Empty);
                RSA rsa = RSA.Create();

                try
                {
                    rsa.ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<char>.Empty, Convert.FromBase64String(pkcs8KeyString), out _);
                }
                catch (CryptographicException e)
                {
                    //Log to ECS
                    Console.WriteLine("The key could not be imported!");
                    Console.WriteLine($"{e.GetType().FullName} {e.Message}");
                    throw;
                }

В чем разница между моей локальной средой и ECS в этом отношении? Что я могу сделать, чтобы избежать исключения в ECS?

1 Ответ

0 голосов
/ 18 марта 2020

Основываясь на моих исследованиях с ECDsa, метод ImportEncryptedPkcs8PrivateKey действительно требует зашифрованный ключ (PEM с блоком ENCRYPTED PRIVATE KEY) на Linux (точнее, при использовании реализации с поддержкой OpenSSL) и выдает, если задан незашифрованный ключ , На Windows (реализация с поддержкой CNG) поддерживаются обе формы: зашифрованные и незашифрованные (PEM с блоком PRIVATE KEY).

Если используется незашифрованный ключ, просто используйте ImportPkcs8PrivateKey.

Изменить: Только что протестирован с RSA, и он ведет себя точно так же, как ECDsa.

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