WPF Browser Application 数字签名使用

本文详细介绍了如何在WPF Browser Application中创建自己的数字证书,替换默认证书,以及如何制作一个自动下载并安装数字证书的程序。通过提供自定义的.pfx证书,确保客户端能够顺利访问应用,同时提供了适用于Windows XP到Windows 7的环境配置和防火墙设置步骤。

http://www.cnblogs.com/cubean/archive/2010/04/22/1718033.html
WPF Browser Application中默认创建的.pfx数字证书有效期只有一年,并且“颁发者”、“颁发给”均为当前机器名和当前登陆用户名的组合,且客户端需要手动安装证书。

 

测试环境说明:

Windows XP professional sp3 + IIS5.1 + IE6,

Windows Server 2003 Standard + IIS6 + IE6,

Windows Server 2008 Standard 64bit sp1 + IIS7.0 + IE7,

Windows 7 professional 64bit + IIS7.5 + IE8

 

1) Windows XP, Windows Server 2003 与Windows Server2008做服务器与客户端都可用,

2) Windows7 因为证书安装程序安装证书时被拒绝访问,做客户端不可用。难道是安全性更高?

   Windows7 做服务端也没问题, 其它机器做客户端测试通过。但IIS 7.5 要在局域网内被其它计算机访问需要设置一下:


  1、依次选择:开始---所有程序---管理工具---高级安全 Windows 防火墙(或者从控制面板里直接找到 windows防火墙);

  2、在高级安全 Windows 防火墙的左边栏,选择“入站规则”;

  3、在右边栏选择"新建规则“;

  4、在弹出的窗口依次选择:选中端口---下一步---选中TCP以及特定本地端口,填入要开放的端口号(这里填入80)---下一步---选中允许连接---下一步---选中所有选项---下一步---填入名称(这里填入IIS)---完成。

 

以下是总结的WPF Browser Application证书制作、发布与自动下载安装完整流程:

1.           首先制作自己的pfx数字证书
1) 下载附件TestProjectpfx.rar解压后得到3个exe文件,1个bat文件。

2) 用文本编辑器打开makeTestpfx.bat文件:

makecert -r -n "CN=Enterprise Name" -b 01/01/2009 -e 01/01/2011 -sv TestPrj.pvk TestPrj.cer

cert2spc TestPrj.cer TestPrj.spc

pvkimprt -pfx TestPrj.spc TestPrj.pvk

将"CN=Enterprise Name"中的Enterprise Name换成自己的公司名称,后面是证书有效起止日期,再后面就是要制作生成的证书名称,有TestPrj.pvk TestPrj.cer TestPrj.spc 三种,需要改名字的话就把这些TestPrj替换掉就可以。

3) 在控制台中执行makeTestpfx.bat文件,会首先弹出输入私钥密码对话框,输入密码2次点Ok,或者不输入密码直接点None;接着会弹出导出证书对话框,直接Next,然后选择导出私钥,下一步默认导出pfx证书,下一步输入密码(WindowsXP中可以不输入密码,而Vista和Windows7中必须输入密码),然后保存该pfx文件,证书导成功。

2.           替换默认生成证书
打开如下界面:

 


点击右边的“Select from File…”选取刚才自己制作的pfx证书。

3.           让客户端自动下载并安装数字证书
1)制作一个下载并安装数字证书的程序:

用C#创建一个Console Application,然后添加如下代码(CertificateInstaller控制台程序)

CertificateInstaller
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);
        }
    }
}

 

 2) 到目录C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\下找到WindowsInstaller3_1文件夹。拷贝并粘贴WindowsInstaller3_1文件夹,并重命名为CertificateInstaller。然后将该文件夹中exe文件替换成刚才第一步生成CertificateInstaller.exe。然后将Product.xml改成如下的内容:

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>

“http://XXX/xxx.cer”就是可供下载的数字证书的链接(xxx.cer可以在刚才生成的pfx文件夹下找到testPrj.cer,放到客户端可以访问的Web Server上)。进入“en”文件夹,并将Package.xml改成如下的内容:

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>

 

3) 将CertificateInstaller包含到WPF Browser Application的安装程序中

在属性面板里面选择“Publish”选项,点击“Preequisites...”按钮

 

 

在弹出的“Preequisites”对话框中选中“Create setup program to install prerequisite components”,并在列表中找到“My Certificate Insteraler”(如果找不到的话,关闭VS再重新打开),选中它并点击“OK”按钮。

 

4) 右键点击项目工程,publish该项目到指定的Web Application服务器即可。

4.            客户端安装数字证书
客户端用浏览器访问WPF Browser Application时会出现类似下面这样的页面。

 

可以看到“My Certificate Insteraler”已经被包含在安装程序中了。点击“Run”按钮,会弹出下面的对话框。

 

 

点击“Run”按钮,并在弹出的对话框上继续点击“Run”按钮。

 

 

这个时候就会弹出安装对话框,点击“Install”按钮就会运行CertificateInstaller.exe,自动下载并安装数字证书。

 

 

通过上面的步骤,数字证书就自动安装到了客户端电脑上了。以后用户就可以直接访问WPF Browser Application了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值