微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin.iOS => 创建密钥对并将公钥 (X.509) 发送到 ASP.NET MVC 应用程序 .NET 4.7.2

如何解决Xamarin.iOS => 创建密钥对并将公钥 (X.509) 发送到 ASP.NET MVC 应用程序 .NET 4.7.2

我是 RSA 的新手。我已经使 Windows 和 Xamarin.Android 客户端应用程序与 ASP.NET MVC .NET 4.7.2 应用程序很好地通信。一切都在工作。客户端应用程序可以与服务器共享他们的公钥,服务器可以与客户端应用程序做同样的事情。

现在我正在 Xamarin.iOS 中实施解决方案,并按照本教程创建密钥对:https://msicc.net/how-to-perform-asymmetric-encryption-without-user-input-hardcoded-values-with-xamarin-ios/

我的问题是将公钥导出到服务器。服务器无法识别公钥。

我的 C# 代码在 Xamarin.iOS 中进行了导出:

            var cert = this.publicKey.GetExternalRepresentation();
            var publicKeyBytes = new byte[cert.Length];
            System.Runtime.InteropServices.Marshal.copy(cert.Bytes,publicKeyBytes,Convert.ToInt32(cert.Length));
            return Convert.ToBase64String(publicKeyBytes,Base64FormattingOptions.InsertLineBreaks);

在服务器端,有我的 c# 代码

        var bytes = Convert.FromBase64String(cer);
        X509Certificate2 cert = new X509Certificate2(bytes);
        this.rsadistant = cert.GetRSAPublicKey();

我花了很长时间查看帖子,并在 swift、objectif c 中看到了许多示例。 iOS 似乎没有导出为 X.509 格式。我还看到微软在 Xamarin.iOS 中做了像 SecCertificate 和 SecCertificate2 这样的类可以导出 X.509 证书,但是当我使用它时,调试器在导出时冻结。

我怎样才能实现我的目标?你已经使用 Xamarin.iOS 实现了吗?

感谢您的帮助!

解决方法

您是否查看过苹果文档:Storing a DER-Encoded X.509 Certificate

here is a working sample 使用 SecCertificate ,检查下面的代码。

var path = Directory.GetParent(GlobaleObjekte.SSLZertifikatePath);
var caPath = Path.Combine(path.FullName,"ca.cert.der");
var caByteArray = File.ReadAllBytes(caPath);
var caCert = new SecCertificate(caByteArray);

var interPath = Path.Combine(path.FullName,"intermediate.cert.der");
var interByteArray = File.ReadAllBytes(interPath);
var interCert = new SecCertificate(interByteArray);

var clientPath = Path.Combine(path.FullName,"client.pfx");
var clientByteArray = File.ReadAllBytes(clientPath);
var clientCert = new X509Certificate2(clientByteArray,Settings.WSClientCertPasswort);

var identity = SecIdentity.Import(clientCert);
var credential = new NSUrlCredential(identity,new SecCertificate[] { caCert,interCert },NSUrlCredentialPersistence.ForSession);

completionHandler(NSUrlSessionAuthChallengeDisposition.UseCredential,credential);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。