如何在Windows Store应用程序中进行TLS/SSL通讯

Windows Store应用程序经常需要使用各种Web服务,为了安全起见,这些服务最好是通过https来访问。那么我们如何在Windows Store应用中使用证书来进行安全的通讯呢,我这里就做一个简单的小结。 首先,如果服务端使用了服务端认证,那么Windows Store应用作为客户端连接服务器的时候,需要验证该服务端证书在客户端是受信任的。那么分两种情况: 一.         如果该证书是被受信任的机构签发的,而且该机构的Root证书已经缺省安装到了客户端,那么,Windows Store应用程序只需要在Package.appxmanifest文件中加入对Shared Uer Certigficates这个Capability的支持,应用程序会自动到系统的Certificate Store中找到该Root证书并通过验证。不过这种方法也有一个问题,由于客户端只验证服务端证书是否来自于同一个Root,所以我们可以很容易的伪造一张服务端证书来通过验证。 二.         如果该证书是一张自签名的证书,那么确实情况下客户端是不会安装这张证书的。那么这时候Windows Store应用程序就无法通过证书的验证。这个问题也好解决,向第一种情况靠拢呗。如果在客户端已经手动安装了这张自签名的证书,那就没问题啦。所以我们需要做的就是将这个自签名的证书从服务端下载下来,然后一台一台的安装到客户端Certificate Store的Root目录下。 可是,这个方法也太不靠谱啦!在很多情况下,我是没有办法将自签名证书一台一台安装到客户端的呀。有没有其他办法呢?有的!我们可以将证书放在Windows Store应用程序中,然后通过Package.appxmanifest的Declarations添加这张证书: 1.       在Available Declarations中选择Certificates,点击Add。 2.       在右边的Trust flags勾选上Exclusive Trust,加上这个以后,就能够保证不是随随便便用一张服务端证书就能够把客户端应用糊弄过去啦。 3.       在右边的Certificates中点击Add New, Store Name需填写Root,Content中添加你所要验证的服务端证书。 4.       在添加以后,该服务端证书会自动添加到你的项目中,我们需要在该证书的文件属性中将Copy to Output Directory改为Copy if newer。 这样,我们就可以很方便的完成服务端验证了,而且也不用担心有人通过伪造服务端证书来截取通讯内容。 接下来我们看一下需要客户端认证的情形。这种情况下,我们需要做两件事: 一.保证客户端已经正确安装了客户端证书。你可以把你的证书文件放在项目中或者远程服务器上。当你的Windows Store应用获得了PKCS12格式的证书数据以后,就可以调用 CertificateEnrollmentManager.UserCertificateEnrollmentManager.ImportPfxDataAsync或者CertificateEnrollmentManager.InstallCertificateAsync来安装该证书。 二.一旦客户端已经正确安装了客户端证书,那么就需要在Windows store应用中获得该证书的实例,这可以通过CertificateStores.FindAllAsync来枚举所有的证书实例,然后找出你所需要的那个,FindAllAsync也支持传入一个CertificateQuery参数来进行筛选。 在获得证书实例之后,我们就可以通过HttpBaseProtocolFilter来设置客户端证书,然后将HttpBaseProtocolFilter作为参数传入HttpClient中实现客户端验证,示例代码如下: var certificates = await CertificateStores.FindAllAsync(); var certificate = certificates.Where(w => w.Subject.Equals(SUBJECTNAME)).FirstOrDefault();…

0

Turn off Notification Hub in Azure Mobile Service to use Legacy Push

Currently when you create a new Windows Azure Mobile Service to send push notification(detailed information can be found in Get started with push notifications in Mobile Services ),  the  notification hub is by default integrated with your mobile service, we really want people to move away from the legacy push, however, for the rare cases…

0

使用Windbg分析Windows Store 应用的崩溃问题

对于上架的windows store应用程序,微软提供了反馈机制让用户在程序崩溃的时候可以自动上传迷你转储(mini dump)文件。这些dump文件对于分析用户遇到的问题是相当有帮助的,这里我就如何使用windbg分析转储文件来做一个示范,我的目标是让即使是没用过windbg的人也能够使用它来分析转储文件,所以如果你发现文章中哪里有让你迷惑的地方,请告诉我。:) 首先,你需要有windows debugger tools,也就是windbg。这是一个强大的系统级调试工具,它附属于Windows WDK和Windows SDK安装包中,WDK这玩意儿太小众了,我们这边暂且不提,所以安装windbg的最佳办法就是安装Windows SDK了,Windows SDK很大,你在安装的时候你可以选择只安装Debugging Tools for Windows。Windows SDK for Windows 8.1的下载地址如下: http://msdn.microsoft.com/en-US/windows/desktop/bg162891 在安装完windbg以后,我们就可以来分析转储文件了。但是且慢,转储文件呢,转储文件到哪里去找? 如果你找不到的话,那么请随我来。当你的windows store应用上架以后,你就可以看到一个“报告”按钮。   点击这个“报告”按钮,你就可以看到应用程序的统计数据以及左边菜单栏中的“质量”链接:   点击“质量”链接你会看到程序关于质量方面统计数据,这里直接忽略前面的三项看第四项“最常见的崩溃情况”,这里就提供了客户上传的转储文件。   选取你想要看的转储文件,然后下载,下载的文件是一个cab格式的压缩包,将它解压缩就得到了dmp后缀的转储文件了。我们会在这里演示两个转储文件的分析。 用windbg打开第一个转储文件,windbg会在命令窗口中显示报错的代码,这通常是在系统的组件中,对我们查抄问题并没有帮助。比如以下就是载入转储文件后显示的内容: Windows 8.1 Version 9600 MP (4 procs) Free x86 compatible Product: WinNt, suite: SingleUserTS Personal Built by: 6.3.9600.16384 (winblue_rtm.130821-1623) Machine Name: Debug session time: Tue Jan 28…

0

如何解决在Windows商店应用中使用SmsDevice类API遇到的Access Denied问题

在开发基于Windows商店的SMS 短信设备应用时,需要使用SmsDevice类 API,该类API仅能用于移动运营商的商店应用(MBAE App)或运营商、移动宽带设备供应商授权的Windows 商店设备应用,即此类应用必须配以相应的配置文件Service/Device Metadata,使得绑定的Windows 商店应用获得使用SmsDevice API的权限。如果metadata配置出现问题,那么就会遇到Access Denied问题。这时候我们可参照如下过程进行手工配置。(基于Windows 8 和Visual Studio 2012,假设metadata已经创建完成,调试机器自带嵌入式移动宽带设备)。 1.  检查Metadata文件是否正确      将Metadata文件拖动到Visual  Studio界面,会弹出Device Metadata Authoring Wizard 对话框,在该对话框中注意检查以下两项: 1)  在Associations 标签下,检查Hardware ID里的设备的PID&VID是否正确   2)  在Applications标签下,检查Metro style Device App中的各项内容,确保与待调试的商店应用中的对应项一致      双击Package.appxmanifest文件,Package 标签下: 将Package name的值填到Metro style Device App 下的Package Name处; 将Publisher 的值填到Metro style Device App 下的Publisher处;               右击Package.appxmanifest文件,选择”View Code”,以XML形式查看该文件 将Application tag 的Id 属性的值填到Metro style Device App下的App…

1

Porting Desktop Apps to Windows 8.1 Store Apps

  Windows Store Applications bring a brand new look and user experience. It’s also a great challenge for the Windows developers who are familiar with the desktop applications development to adapt to the new interface and programing model. In this article, I try to provide the generic guideline on how to port desktop apps to…

2

Incremental update item data for ListViewBase controls in windows 8.1

Generally Listview and Gridview which based on ListViewBase class should process a large amount of data items. It may heavily impact the performance if we can’t handle it properly. We can utilize UI virtualization to solve parts of memory and performance issues. But we will still encounter the problem that the data items can’t be…

0

Porting Desktop Apps to Windows Store Apps

  Windows Store Applications bring a brand new look and user experience. It’s also a great challenge for the Windows developers who are familiar with the desktop applications development to adapt to the new interface and programing model. In this article, I try to provide the generic guideline on how to port desktop apps to…

0