Я создаю приложение Xamarin, которое должно загружать сертификаты X.509 и открытые ключи RSA из цепочки для ключей Android. Я хочу преобразовать их в экземпляр X509Certificate2 (System.Security.Cryptography.X509Certificates.X509Certificate2), но не знаю, как это сделать.
Мне удалось получить доступ как к цепочке сертификатов (java.security.cert.X509Certificate[]), так и к закрытому ключу (java.security.IPrivateKey), но я не могу объединить их в X509Certificate2. Я нашел эта старая ветка, в которой у автора была похожая проблема, но не было решения для его проблемы.
Это код, который он использовал (больше не работает с Android 4.1. Кроме того, я не знаю, какой класс PKCS8 он использовал, так как Mono.Security.Cryptography.PKCS8 не является общедоступным):
X509Certificate[] certChain = KeyChain.GetCertificateChain(ctx, Alias);
IPrivateKey privKey = KeyChain.GetPrivateKey(ctx, Alias);
KeyStore pkcs12KeyStore = KeyStore.GetInstance("PKCS12");
pkcs12KeyStore.Load(null, null);
pkcs12KeyStore.SetKeyEntry(Alias, privKey, null, certChain);
X509Certificate javaCertificate = (X509Certificate) pkcs12KeyStore.GetCertificate(Alias);
PKCS8.PrivateKeyInfo privateKeyInfo = new PKCS8.PrivateKeyInfo(privKey.GetEncoded());
RSA privatekeyRsa = PKCS8.PrivateKeyInfo.DecodeRSA(privateKeyInfo.PrivateKey);
X509Certificate2 certificate = new X509Certificate2(javaCertificate.GetEncoded());
certificate.PrivateKey = privatekeyRsa;
Начиная с Android 4.1, privKey.GetEncoded() возвращает null, поэтому я не могу использовать этот способ и поэтому не знаю, как получить закрытый ключ в сертификат.
Итак, вопрос: как я могу создать X509Certificate2 с API KeyChain?
Заранее спасибо.