您的位置:首页 > 其它

WPF 浏览器程序 证书制作与客户端自动下载安装

2015-07-20 10:05 645 查看
以下是总结的WPF Browser Application证书制作、发布与自动下载安装完整流程:

</pre><p>一、证书制作</p><p>在建立WPFBrowser Application项目的时候系统会自动给程序创建一个证书,可以在项目——属性——签名——中进行查看,如下图:</p><img src="http://img.blog.csdn.net/20150720095621700?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><p></p><p>1、  系统创建证书</p><p>在项目——属性——签名——创建测试证书如下</p><img src="http://img.blog.csdn.net/20150720095714031?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><p></p><p>输入证书密码,选择签名算法</p><img src="http://img.blog.csdn.net/20150720095759861?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><p></p><p>导出证书</p><p>更多详细信息——详细信息——复制到文件——确定</p><img src="http://img.blog.csdn.net/20150720095840017?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><p><img src="http://img.blog.csdn.net/20150720095910214?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p>最后一步一步导出证书</p><p>1、  自己创建证书</p><p>下载附件<a target=_blank target="_blank" href="http://files.cnblogs.com/cubean/TestProjectpfx.rar"><span style="color: black;">TestProjectpfx.rar</span></a>解压后得到3个exe文件,1个bat文件。</p><p style="background:#F5FAFE">用文本编辑器打开makeTestpfx.bat文件:</p><p>makecert -r -n "CN=Enterprise Name" -b 01/01/2009 -e01/01/2011 -sv TestPrj.pvk TestPrj.cer</p><p>cert2spc TestPrj.cer TestPrj.spc</p><p>pvkimprt -pfx TestPrj.spc TestPrj.pvk</p><p>将"CN=EnterpriseName"中的EnterpriseName换成自己的公司名称,后面是证书有效起止日期,再后面就是要制作生成的证书名称,有TestPrj.pvkTestPrj.cer TestPrj.spc三种,需要改名字的话就把这些TestPrj替换掉就可以。</p><p>3) 在控制台中执行makeTestpfx.bat文件,会首先弹出输入私钥密码对话框,输入密码2次点Ok,或者不输入密码直接点None;接着会弹出导出证书对话框,直接Next,然后选择导出私钥,下一步默认导出pfx证书,下一步输入密码(WindowsXP中可以不输入密码,而Vista和Windows7中必须输入密码),然后保存该pfx文件,证书导成功。</p><p>替换默认证书</p>项目——属性——签名——从文件选择——选择生成的证书文件——输入密码——导入后可以查看信息信息<p><img src="http://img.blog.csdn.net/20150720095945413?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p></p><p>一、让程序自动下载并安装证书</p><p>1、  创建自动安装程序</p><p>建立一个控制台应用程序</p><pre name="code" class="csharp">using System;
using System.Net;
using System.Windows.Forms;
using System.Security.Cryptography.X509Certificates;

namespace CertificateInstaller
{
class Program
{
static void Main(string[] args)
{
try
{
if (args.Length > 0)
{
WebClient webclient = new WebClient();
byte[] certificatefile = webclient.DownloadData(args[0]);

if (certificatefile.Length > 0)
{
InstallCertificate(StoreName.AuthRoot, certificatefile);
InstallCertificate(StoreName.TrustedPublisher, certificatefile);
}
else
{
ShowErrorMessage("Can't download the certificate file.");
}
}
}
catch (System.Exception ex)
{
ShowErrorMessage(ex.Message);
}
}

static void InstallCertificate(StoreName storageName, byte[] certificatefile)
{
X509Certificate2 certificate = new X509Certificate2(certificatefile);

X509Store store = new X509Store(storageName, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Remove(certificate);
store.Add(certificate);
store.Close();
}

static void ShowErrorMessage(string strErrorMessage)
{
MessageBox.Show(strErrorMessage, "Certificate Installation Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}

将程序编译生成EXE;

1、 制作程序必备组件

找到目录C:/ProgramFiles/Microsoft SDKs/Windows/v6.0A/Bootstrapper/Packages其中Program Files有可能是Program
Files (x86);v6.0A有可能是别的版本如v7.0A等

在目录下面复制一个安装主键的文件夹并进行重命名,如复制WindowsInstaller3_1文件夹改为Test,

复制刚才生成的EXE到改文件夹

修改该文件夹中的Product.xml文件为:

<?xml version="1.0" encoding="utf-8" ?>

<Product
xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="CertificateInsteraller"
>

<PackageFiles CopyAllPackageFiles="true">
<PackageFile Name="CertificateInstaller.exe" />
</PackageFiles>

<Commands Reboot="Immediate">
<Command PackageFile="CertificateInstaller.exe"
Arguments= 'http://XXX/xxx.cer'
EstimatedInstallSeconds="30" >
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
</ExitCodes>
</Command>
</Commands>
</Product>

其中Arguments后面应该为客户端可以下载证书文件的的地址;

CertificateInstaller.exe应该是前面生成的exe的文件名

修改该文件夹下一级文件夹下的Package.xml为

<?xml version="1.0" encoding="utf-8" ?>

<Package
xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
Name="DisplayName"
Culture="Culture"
>
<Strings>
<String Name="DisplayName">My Certificate Insteraller</String>
</Strings>

</Package>
My Certificate Insteraller为添加必备组件是显示的名称,如



一、将自动安装程序进行打包

WPF Browser Application应用程序——属性——发布——系统必备——选择刚才的组件



一、设置发布选项

1、 设置发布信息

项目——属性——发布——选项——



设置相关发布信息



这里面的部署网页一定要设置一个,最后点击发布后通过浏览器访问上面的发布页面



点击运行就会自动下载和安装证书;

注意:这里的发布网页要设置,不然不会自动生成,生成一次后 就可以进行编辑编辑成自己的压面

证书下载安装可以使用上面的方式、也可以设置部署页面后在这个部署页面中添加一个下载按钮等方式来下载并手动安装。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: