我如何在C#/ Xamarin的android钥匙串中使用带有私钥的X.509证书?

问题描述 投票:0回答:1

我正在构建一个Xamarin应用,该应用应从Android钥匙串中加载X.509证书和RSA公钥。我想将它们转换为X509Certificate2System.Security.Cryptography.X509Certificates.X509Certificate2)的实例,但是我真的不知道该怎么做。

我能够访问证书链(java.security.cert.X509Certificate [])和私钥(java.security.IPrivateKey),但无法将它们组合为< [X509Certificate2。我发现this个旧线程,作者遇到了类似的问题,但实际上并没有解决他的问题的方法。

这是他使用的代码(自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,所以我不能使用这种方式,因此不知道如何将私钥放入certificate
所以,问题是:如何使用KeyChain API创建X509Certificate2?

提前感谢。

我正在构建一个Xamarin应用,该应用应从Android钥匙串中加载X.509证书和RSA公钥。我想将它们转换为X509Certificate2的实例(System.Security.Cryptography ....

java c# xamarin xamarin.android android-keystore
1个回答
0
投票
简短的答案是你不能。这是因为私钥存储在硬件中,并且存储在Android 4.1中,而您的应用程序无法访问它,这就是为什么它返回null的原因。Here's an article,如果您想了解更多。
© www.soinside.com 2019 - 2024. All rights reserved.