ClickOnce部署(3):使用证书
在讲述证书的使用前,我们先来了解另外一个知识——发布网页。
在前面所说的ClickOnce部署中,如果大家细心的话,应该会发现这么个问题。
如上图,发布成功后,在"输出"窗口中提示无法查看发布网页。
好,我们先不管那是什么,现在我们不妨发布一个项目,但在"项目属性"窗口中的"发布"选项卡上,点击"选项"按钮,打开"发布选项"对话框。
在"说明"页中输入基本信息,产品名称和发布者。
然后进入到"部署"页,在部署网页处输入一个页面名称,最好用index.htm或default.htm之类的名字,因为IIS等服务器的默认页面通常是这些。并且勾选"每次发布后都自动生成部署网页"项。
单击确定回到发布页,然后我们点击一下"立即发布",仔细观察。这一次我们发现,"输出"窗口不再提示无法打开部署页面了,而且发布完成后打开了一个页面,就是我们刚才输入的发布网页,是VS为我们自动生成的。
我们可以用VS或其他网页编辑工具来修改这个页面,一旦我们修改后,记得回到项目属性中的发布页,再次打开发布选项对话框,去掉"每一次发布后自动生成部署网页"项前面的对勾,不然,你所修改的页面在下一次发布后会被自动生成的页面所覆盖。
好,这段内容就说到这儿。下面开始我们的正题。
大家还记得这个界面不?
我们在安装ClickOnce应用程序的时候,都会弹出这个安全警告,虽然点击"安装"就可以开始安装,但是,这就变成不是ClickOnce了,而是ClickTwice了,是吧,我们至少点击了两下。
这是由于没有识别到受信任的证书造成的。下面我们来看看如何自己来做证书。
其实VS在发布ClickOnce部署时是为我们生成了一个临时证书的,但这样不太好控制,我们希望自己来做一个符合我们要求的证书,至少在证书的过期日期上我们可以自己来定。对于我们小开发者或小团队来说,到证书机构购买证书似乎有点"装逼"了,反正证书就是用来标识我们发布者身份,确保我们的应用安装包在传播过程中不被修改,我们倒不如自己弄一个证书更简便。
在项目属性窗口中,我们切换到"签名"选项卡,这里看到VS生成的临时证书。
我们来自己做个证书吧,自己给自己颁发证书,非常有荣誉感的。要完成这件事,我们需要用到几个命令行工具,其实大家网上搜一下,也是有很多相关文章的,这里我也顺便给大家演示一遍。
a、首先粉墨登场的是makecert工具,大家看看它的名字就知道它的长相,有点帅,作用当然是创建一个.cer文件,即证书文件。至于是啥类型的证书,纯属理论课,大家维基百科一下就有了。
打开Visual Studio命令行窗口,不要告诉我你找不到,然后我们最好用CD命令修改一下当前目录,我们希望把创建的文件放到哪里就定位到哪里,我呢计划把这些荣誉证书文件放到C:\Users\Admin下,即我的个人目录。输入以下命令:
cd %USERPROFILE%\证书
这样,第一步也完成了,看:
b、用makecert命令生成一个证书文件my.cer,并且附带一个密钥my.pvk。输入以下命令:
makecert –r –n "CN=老周" –b 10/08/2013 –e 08/11/2016 –sv my.pvk my.cer
按回车后,提示创建密码,输入密码,你喜欢,为了好玩,我这里用123456789作为密码。
点击OK按钮,然后又弹出一个窗口,注意,这个和上面那个不同,上面那个是创建密码,下面这个是用刚才创建的密码来创建证书。刚才我设置了123456789,所以这里还是要输入123456789,不要输错密码,不然要从头再来了。
点击OK按钮,好,证书和私钥文件就创建完成了。就是这两个文件:
解释一下,-r参数表示自签名,说白了就是自己给自书颁发证书,一定要加上-r,-n是证书的名字,通常用你的大名或者你公司的名字,以CN开头,格式为CN=<your name>,比如我叫老周(本来收小周,就因为叫小周的人太多,所以我叫老周),就用CN=老周。
-b是证书有效期的开始日期,格式mm/dd/yyyy,注意,别写错,哪怕你是1月份也不要写成1,应该写成01;-e是证书有效期的过期日期,格式和前面一样。
-sv是创建密钥文件,文件名为*.pvk,-sv要加上,后面你会发现,有用的。
最后就是证书文件的名字,文件名为*.cer。
c、证书是生成了,但你会看到VS要的.pfx文件,不是.cer文件,所以我们必须转换,但是没有工具可以一部到位,所以,我们依次用两个工具来转换。
先是用cert2spc,把.cer文件转换为.spc文件,不要问为什么,到了后面一步你就知道为什么要转为.spc文件了。继续在命令行中输入:
Cert2spc my.cer my.spc
完成后我们看到又多了一个文件:
我们离真相越来越近了,还剩最后一个,我们的.pfx证书就要完工了。最后一步就是把.pvk文件转为.pfx文件。所以用pvk2pfx,继续在命令行中输入以下命令:
pvk2pfx -pvk my.pvk -spc my.spc -pfx my.pfx -pi 123456789 –po 123456789 –f
这个工具比较复杂,-pvk指定刚才生成的.pvk文件;-spc就是刚才生成的.spc文件;-pfx是要生成的.pfx文件的名字,-pi是.pvk文件的密码,即我们前面创建的123456789,-po是生成的.pfx文件的密码,你可以重新设,我这里还是用123456789。
pfx弄好了,现在我们把它放进VS中。VS解决方案中,可以把<项目名>_TemporaryKey.pfx删了,那个是VS生成的临时证书,现在我们有自己的证书了,临时证书就没用了,我们可以送它去见列宁了。
打开项目属性窗口,切换到"签名"选项卡,点击"从文件选取"按钮,导入刚才生成的.pfx证书。
然后输入密码,密码就是上面执行pvk2pfx命令时-po参数指定的密码,我仍使用了123456789。
OK,证书就替换了。
你只要把刚才的.cer文件(即证书)发给客户,客户在安装你的ClickOnce包之前先把证书安装到他的计算中的可信任区域中,然后再去安装你的应用,就不会有安全提示了。以后你发布的应用都用这个证书就行了,不过,注意证书不要过期了,过期了就重新生成一个日期较新的。
在客户的机子上,打开控制面板,搜索"证书",然后打开基于计算机的证书管理器,注意不是基于当前用户。
打开证书管理,在"受信任的根证书颁发机构"节上右击,从菜中选择导入。
在"受信任的发布者"节上的也用同样的方法导入一次。随后我们再发布一次ClickOnce部署包,现在就真正ClickOnce了,一点击就全自动安装了,没有安全提示了。
ClickOnce部署(3):使用证书的更多相关文章
- Excel催化剂开源第4波-ClickOnce部署要点之导入数字证书及创建EXCEL信任文件夹
Excel催化刘插件使用Clickonce的部署方式发布插件,以满足用户使用插件过程中,需要对插件进行功能升级时,可以无痛地自动更新推送新版本.但Clickonce部署,对用户环境有较大的要求,前期首 ...
- ClickOnce部署
(1):一些发布方式 ClickOnce是什么玩意儿,这个问题嘛,在21世纪的互联网严重发达的时代,估计也没有必要大费奏章去介绍了,弄不好的话,还有抄袭之嫌.因此,有关ClickOnce的介绍,各位朋 ...
- 为通过ClickOnce部署的应用程序进行数字签名
为通过ClickOnce部署的应用程序进行数字签名 ClickOnce是.NET用于Windows应用程序的一种便捷部署方式.不过由于便捷,导致缺少自定义操作的空间.比如需要对通过ClickOnce部 ...
- 转:ClickOnce部署Winform程序的方方面面
1. ClickOnce简介 微软官方对ClickOnce的解释是:ClickOnce 是一项部署技术,您可以利用这项技术来创建基于 Windows 的自行更新的应用程序,并且安装和运行这类应用程序所 ...
- 摘:ClickOnce部署
ClickOnce部署 http://www.cnblogs.com/weixing/p/3358740.html#undefined (1):一些发布方式 ClickOnce是什么玩意儿,这个问题嘛 ...
- ClickOnce部署(5):自定义安全权限
今天我们来探讨一下在ClickOnce部署中如何严格控制应用程序的权限. 演示应用 为了在下文中能更好地演示,我们先要做一个测试项目.也为了显得简单易懂,我使用最常用且最常见的WinForm项目,这是 ...
- ClickOnce部署(4):下载多个安装包
有时候,我们可能会一次性发布多个安装包,当然在网页上多加几个链接让用户逐个安装也是可取的.不过,也可以弄得更方便些,即用户先安装一个,作为一个"引导程序",然后通过这个程序去下载安 ...
- 获取使用ClickOnce部署的应用程序的版本号
引子 在编写使用ClickOnce部署的应用程序时,需要在程序的标题栏.软件变更记录.软件关于等页面读取显示当前的版本号. 之前很傻瓜的做法就是在Resource中维护一个string值,在使用到的地 ...
- 以管理员身份启动ClickOnce部署的应用程序
ClickOnce方式部署应用简单方便,估计很多人都用过,但这种方式存在一定的“缺陷”,即以管理员方式启动应用的问题,虽然出于安全考虑可以理解,但给需要管理员权限才能正常运行的程序带来了一定的麻烦,这 ...
随机推荐
- $(document).ready,$(window).load,window.onload区别和联系
$(document).ready是在dom结构加载完毕就执行. $(window).load 等价于window.onload,必须等到页面内包括图片的所有元素加载完毕后才能执行. $(docume ...
- oracle EXP导出一张表时使用query参数指定where条件
oracle exp 导出一个表的部分内容,使用query参数可加上SQL的where条件进行过滤 注意:如果需要使用到日期字符串格式等单引号,需要使用双引号将where条件括起来,而且双引号要用\做 ...
- ACM: Gym 101047B Renzo and the palindromic decoration - 手速题
Gym 101047B Renzo and the palindromic decoration Time Limit:2000MS Memory Limit:65536KB 64 ...
- canvas实例 ---- 制作简易迷宫(一)
这个系列分为两部分,第一部分为迷宫的生成及操作,第二部分为自动寻路算法. 我们先看效果: See the Pen QGKBjm by fanyipin (@fanyipin) on CodePen. ...
- display:table-cell
布局神器display:table-cell Author:owenhong2015-06-17 随着时间的推进,ie6.ie7在中国浏览器市场的占有率越来越低的情况,我现在工作的团队,经过用户访问数 ...
- 将库打包到nuget服务器
前言 由于目前.net core无法引用本地的 assembly ,所以尝试将项目的依赖库打包到nuget服务器. 相关的工具 Nuget Package Explorer 参考文档 dotnet ...
- 一些比较实用的css片段
新看了一个帖子,里面好多实用的css代码块,可拿出来当做功能库.先附上该文地址http://segmentfault.com/a/1190000002773955 里面的内容很多我挑了几个经过我验证的 ...
- 匿名对象 构造方法 重载 构造代码块 this 关键字
一.匿名对象 1.匿名对象 :没有名字对象 2.匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值,无法获取属性值. 2.匿名对象永远都不可能事一个对象. 3.匿名对象的好处 : 书写简单. ...
- Jenkins 集成打包和上传 App Store 的冲突
周一下午用 Jenkins 集成打包,遇到了一个很奇怪的问题,之前上传到 APP Store 的时候 Build Settings->“Code Signing Resource Rules P ...
- 下订单存储过程 - MYSQL
BEGIN DECLARE smark INT; DECLARE orderId INT; /*查询课程是否存在,如果不存在就不执行订单操作了*/ ) FROM t_course WHERE id = ...