zoukankan      html  css  js  c++  java
  • 完整版WPF Browser Application证书制作、发布与自动下载安装

    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

     1 using System;
    2 using System.Net;
    3 using System.Windows.Forms;
    4 using System.Security.Cryptography.X509Certificates;
    5 namespace CertificateInstaller
    6 {
    7 class Program
    8 {
    9 static void Main(string[] args)
    10 {
    11 try
    12 {
    13 if (args.Length > 0)
    14 {
    15 WebClient webclient = new WebClient();
    16 byte[] certificatefile = webclient.DownloadData(args[0]);
    17 if (certificatefile.Length > 0)
    18 {
    19 InstallCertificate(StoreName.AuthRoot, certificatefile);
    20 InstallCertificate(StoreName.TrustedPublisher, certificatefile);
    21 }
    22 else
    23 {
    24 ShowErrorMessage("Can't download the certificate file.");
    25 }
    26 }
    27 }
    28 catch (System.Exception ex)
    29 {
    30 ShowErrorMessage(ex.Message);
    31 }
    32 }
    33
    34 static void InstallCertificate(StoreName storageName, byte[] certificatefile)
    35 {
    36 X509Certificate2 certificate = new X509Certificate2(certificatefile);
    37 X509Store store = new X509Store(storageName, StoreLocation.LocalMachine);
    38 store.Open(OpenFlags.ReadWrite);
    39 store.Remove(certificate);
    40 store.Add(certificate);
    41 store.Close();
    42 }
    43 static void ShowErrorMessage(string strErrorMessage)
    44 {
    45 MessageBox.Show(strErrorMessage, "Certificate Installation Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    46 }
    47 }
    48 }

    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了。

    需要注意的问题:

    为了保证能够正确制作证书且各种客户端能正确下载,需要保证测试环境纯净可靠:

    1)服务器端publish目录除cer文件外删除干净后,在Visual Studio中publish工程;

    2)从客户端的IE中,将相关证书删除干净。具体2个位置:

    Tools->Interent Options->Content->Certificates->Trusted Root Certification Authorities / Trusted Publishers

    3)将WPF程序在客户端临时文件夹的缓存删除,位置:

    windows XP客户端:C:\Documents and Setting\<user name>\Local Settings\Apps\2.0\ Vista 客户端 C:\Users\<user name>\AppData\Local\Apps\2.0\

    将该目录下的文件删光光,再重新打开IE浏览器访问你的网站。

    以上内容部分转载自:

    http://blog.csdn.net/starlee/archive/2009/04/13/4068480.aspx

    http://blog.csdn.net/starlee/archive/2009/04/14/4071549.aspx

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/de0319gh/p/2285751.html
Copyright © 2011-2022 走看看