gpt4 book ai didi

java - 如何在 C#/Xamarin 中使用带有 Android 钥匙串(keychain)私钥的 X.509 证书?

转载 作者:行者123 更新时间:2023-12-01 21:34:23 24 4
gpt4 key购买 nike

我正在构建一个 Xamarin 应用程序,该应用程序应从 Android 钥匙串(keychain)加载 X.509 证书和 RSA 公钥。我想将它们转换为 X509Certificate2 的实例 (System.Security.Cryptography.X509Certificates.X509Certificate2),但我真的不知道如何执行此操作。 p>

我能够访问证书链 (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,所以我不能使用这种方式,因此不知道如何获取私钥进入证书

所以,问题是:如何使用 KeyChain API 创建 X509Certificate2?

提前致谢。

最佳答案

简短的回答是你不能。这是因为私钥存储在硬件中,并且从 Android 4.1 开始,您的应用程序无法访问它,这就是它返回 null 的原因。 Here's an article如果您想了解更多信息。

关于java - 如何在 C#/Xamarin 中使用带有 Android 钥匙串(keychain)私钥的 X.509 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58807446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com