xamarin UWP证书问题汇总
打算开发一个软件使用rsa加密的东西,所以有用到数字证书这块,最近遇到些问题,
问题一:使用如下代码添加数字证书后,在证书管理器的当前用户和本地计算机下都找不到这张证书。
using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.MaxAllowed); string documentsPath = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
var path = Path.Combine(documentsPath, @"Mytestcer.pfx");//Mytestcer.pfx
X509Certificate2 myX509Certificate2 = new X509Certificate2(
path, //证书路径
"", //证书的私钥保护密码
X509KeyStorageFlags.Exportable|X509KeyStorageFlags.UserKeySet | X509KeyStorageFlags.PersistKeySet//表示此证书的私钥以后还可以导出
);
store.Add(myX509Certificate2); }
问题二:如上面代码添加完数字证书后,使用下列代码却可以看查到我导入的数字证书。
using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadOnly);
foreach (var item in store.Certificates)
{
if (item.SerialNumber == "22307124FFF203CD55109BB")
{
X509Certificate2 cert = new X509Certificate2(item.RawData,"", X509KeyStorageFlags.UserKeySet|X509KeyStorageFlags.Exportable|X509KeyStorageFlags.PersistKeySet);
var s = item.Export(X509ContentType.Pkcs12);
result = item.Export(X509ContentType.Pfx, "");
break;
}
}
}
问题三,我直接点击证书,安装后在证书管理器上可以看到这张证书,在使用问题二去取证书的时候,发现有两张一样的证书,且其中一张可以用item.Export(X509ContentType.Pfx, "1111111111");取到密钥,其中一张报错:拒绝访问。
问题四,在添加一个应用,使用问题二的方式访问数字证书,可以取到一张证书,但是取私钥时报错:拒绝访问。
推断是安装时有权限问题,应用程序自己安装的证书只能自己去调用,且证书管理器看不见,为应用程序私有的证书,安装的证书其他程序找不到。
尝试过下列方式:
方式一:设置下列两个属性为true,尝试结果:失败,在xamarin uwp环境下不存在下面的设置,及没有下面命名空间的设置字段。
System.Security.Cryptography.RSACryptoServiceProvider.UseMachineKeyStore=true;
System.Security.Cryptography.DSACryptoServiceProvider.UseMachineKeyStore=true;
方式二:如何使用System.Security.Cryptography命名空间,尝试结果:解决,在早期版本中不存在上面的命名空间,需升级到最新版本,
Microsoft.NETCore.UniversalWindowsPlatform 版本5.2.2
方式三:设置下列文件的权限,C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA)的“完全控制”权限设置为“允许”。尝试结果:设置后无效果。
方式四:证书管理器->本地计算机->证书->所有任务->管理私钥,添加权限。尝试结果:未能解决问题三。
方式五:使用下列方式插入数字证书,
FileOpenPicker picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".pfx");
StorageFile pfxFile = await picker.PickSingleFileAsync();
if (pfxFile != null)
{
// 将证书内容转为base64字符串
IBuffer buffer = await FileIO.ReadBufferAsync(pfxFile);
string cerB64 = CryptographicBuffer.EncodeToBase64String(buffer);
// 密码
string password = "";
// 导入证书
// 导入到当前用户存储
await CertificateEnrollmentManager.UserCertificateEnrollmentManager.ImportPfxDataAsync(cerB64, password, ExportOption.Exportable, KeyProtectionLevel.NoConsent, InstallOptions.DeleteExpired, "GoodBoy");
// 导入到当前应用存储
//await CertificateEnrollmentManager.ImportPfxDataAsync(cerB64, password, ExportOption.Exportable, KeyProtectionLevel.ConsentOnly, InstallOptions.DeleteExpired, "GoodBoy");
}
尝试结果:导入的证书可以正常显示了,也可以隐藏,解释如下:系统为每个APP创建一个独立的证书存储区,在应用安装时创建,在应用卸载时被删除。因此,每个应用的证书只能自己使用,不能访问其他应用的证书。如果希望让其他应用也能使用证书,就要用“共享用户证书”,被共享的证书会导入到当前系统的用户证书存储区中,所以,其他应用都可以访问,当然了,为了防止别有用心的人乱来,应用只有导入和读取的权限,不能写入和删除证书。
感谢园区东邪独孤提供的文档,我是搬运工。
方式六:使用方式五导入证书时,如果选择
CertificateEnrollmentManager.UserCertificateEnrollmentManager.ImportPfxDataAsync导入证书,那证书可见,但是使用问题二方法去取私钥时会提示拒绝访问,使用
CertificateEnrollmentManager.ImportPfxDataAsync导入证书,证书只单独应用可用,证书不可见,使用问题二方式访问私钥正常使用。尝试结果:问题解决。
遗留问题:当为共享证书的时候,拒绝访问私钥。
xamarin UWP证书问题汇总的更多相关文章
- xamarin uwp数字证书公钥私钥
对于数字证书存储导入到电脑中,采用如下方式: /// <summary> /// 导入证书 /// </summary> /// <param name="ra ...
- xamarin UWP ActivityIndicator
在xamarin的UWP平台使用ActivityIndicator时,如果你时后台创建的这个对象,请设置他的宽度,不然在UWP平台下会发现找不这个对象,其实是在这个平台和特点版本下的宽度没设置,导致有 ...
- xamarin UWP图片读取
xamarin使用listview时经常会使用图片,而图片的图片源设置在uwp平台中是有平台特性的,这点请注意区分处理.也就是说在android和IOS上正常的处理在uwp下却是错误的方式. 如同一张 ...
- xamarin UWP平台线程交互问题
先吐槽一下,xamarin到现在为止,虽然开发一下应用尚可,对于一些简单的app开发使用xamarin-forms方式开发,虽然有一些优势,可以省下开发三个平台共同功能的时间,但是当我们随着项目深入的 ...
- xamarin UWP平台下 HUD 自定义弹窗
在我的上一篇博客中我写了一个在xamarin的UWP平台下的自定义弹窗控件.在上篇文章中介绍了一种弹窗的写法,但在实际应用中发现了该方法的不足: 1.当弹窗出现后,我们拖动整个窗口大小的时候,弹窗的窗 ...
- xamarin UWP设置HUD加载功能
使用xamarin开发的时候经常用到加载HUD功能,就是我们常见的一个加载中的动作,Android 下使用 AndHUD , iOS 下使用 BTProgressHUD, 这两个在在 NuGet 上都 ...
- xamarin UWP中MessageDialog与ContentDialog的区别
MessageDialog与ContentDialog的异同点解析: 相同点一:都是uwp应用上的一个弹窗控件.都能做为弹出应用. 相异点一:所在命名空间不同,MessageDialog在Window ...
- xamarin UWP自定义圆角按钮
uwp自带的button本身不支持圆角属性,所以要通过自定义控件实现. 通过设置Button的Background=“{x:Null}”设置为Null使背景为空,再设置Button.Content中的 ...
- 微软XAML Studio - WPF, Sliverlight, Xamarin, UWP等技术开发者的福音
目录 编辑器功能 数据源功能 调试数据绑定 伟大的开始 我们来一起实践吧 最近又在继续倒腾WPF的项目,继续使用Caliburn.Micro和Xceed来堆代码.每次调试xaml上的binding,都 ...
随机推荐
- 毕业论文—使用js将canvas保存为图片文件,并且自定义文件名
该文章引用http://blog.csdn.net/qq547276542/article/details/51906741 1.从canvas中直接提取图片元数据 // 图片导出为 png 格式 v ...
- Objective-C 源码初探 __attribute__
#import <Foundation/Foundation.h> //延迟执行,delayFunc函数即为延迟执行的函数 #define onExit\ __strong void (^ ...
- c、c++ 常用函数记录
1.void* memcpy(char*dest, char*src, size_tnum) 将第二个参数拷贝到第一个参数,最后一个是长度. 2.void *memset(void *s, int ...
- [RxJava^Android]项目经验分享 --- 失败重试
简单介绍一下业务逻辑:获取字符串,如果获取失败进行10次重试,超出10次未成功视为失败. 模拟获取字符串场景 代码块 class MsgTool { int count; String getMsg( ...
- init shutdown reboot poweroff halt区别
init 首先看看LINUX系统几种运行级别# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有 NFS# 3 - 完全多用户 ...
- 原生js封装二级城市下拉列表
闲的蛋疼,封装了个二级城市下拉 先保证html里有 <select id="province" size=1 > </select> <select ...
- dvb标准
一.概念 DVB, 数字视频广播Digital Video Broadcasting的缩写, 是由DVB项目维护的一系列国际承认的数字电视公开标准.(欧标)二.分类DVB系统传输方式有如下几种: 卫星 ...
- JavaScript-Object基础知识
1. 定义:对象是JS的核心概念,也是最重要的数据类型.js的所有数据都可以被视为对象. 对象是一种无序的数据集合,由若干个键值对(key:value)构成,由{ ...
- cf 红名计划!
我要成为红名爷! 这是现在好弱好弱的窝 >_< ****************UPD ON 2015/12/10 0:20 啊啊啊啊啊啊啊啊啊啊啊啊把时间记错了啊QAQ 我也不知道为什么 ...
- 【转】Android Studio-1.2版本设置教程
如果重新安装Android Studio的话要重新配置风格选项啥的,这篇是个很好的教程,原文链接:http://blog.csdn.net/skykingf/article/details/45485 ...