Xamarin.iOS密钥链标识未持久化
我已经创建了一个自签名的.pfx文件,当我拖到emulator上时,会出现导入屏幕,我可以单击,然后使用Xamarin.iOS密钥链标识未持久化,ios,xamarin,xamarin.ios,Ios,Xamarin,Xamarin.ios,我已经创建了一个自签名的.pfx文件,当我拖到emulator上时,会出现导入屏幕,我可以单击,然后使用select*from cert在模拟器密钥链上,我可以看到导入的证书 当我在代码中加载此证书并尝试添加它时,我会从保存操作中获得一个成功,但在随后尝试访问标识时,它会返回ItemNotFound,此外,当我在导入后检查密钥链时,表中也没有证书 await certStream.CopyToAsync(ms); var options = NSDictionary.FromObjectsAn
select*from cert
在模拟器密钥链上,我可以看到导入的证书
当我在代码中加载此证书并尝试添加它时,我会从保存操作中获得一个成功
,但在随后尝试访问标识时,它会返回ItemNotFound
,此外,当我在导入后检查密钥链时,表中也没有证书
await certStream.CopyToAsync(ms);
var options = NSDictionary.FromObjectsAndKeys(new[]
{
NSObject.FromObject("CertPassword")
}, new[]
{
SecImportExport.Passphrase
});
var result = SecImportExport.ImportPkcs12(ms.ToArray(), options, out
NSDictionary[] imports);
if (result != SecStatusCode.Success)
throw new Exception("Failed importing certificate identity");
var identity = imports[0][SecImportExport.Identity];
certRecord.SetValueRef(new SecIdentity(identity.Handle));
var identityImportResult = SecKeyChain.Add(certRecord);
var savedIdentity = SecKeyChain.QueryAsRecord(new
SecRecord(SecKind.Identity)
{
Label = "ApplicationIdentityCertificate"
}, out SecStatusCode savedResult);
通过全面阅读,我确保了emulator有一个相关的权限,而且它也有密钥链共享权限,因为有传闻证据表明,这有时也会影响保存到密钥链的能力。因此我最终成功地实现了这一点。原来我缺少了一个在SecKeyChain类上可用的非常简单的方法
var identity = imports[0][SecImportExport.Identity];
SecKeyChain.AddIdentity(new SecIdentity(identity.Handle));
上面的代码片段是我需要进行的更改,现在标识以正确的bundle ID存储在密钥链中,我们的应用程序可以加载证书和私钥,无论出于何种原因,通过
SecKeyChain.Add()添加它
方法对标识无效。您的意思是密钥链未保存在表中吗?还是不保存.pfx文件中的数据?创建的安全性似乎没有保存,现在我是否在表中查找错误的位置很可能是,但保存后无法立即加载标识这一事实对我来说似乎很奇怪