100165446.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 157 行 · 第 1/2 页
HTM
157 行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
14.4.10 使用证书发布代码
</title></head>
<body>
<div class="area">
<div class="col1">
<div class="lineBlue">
</div>
<!-- title -->
<div class="arcTitle">
<h1>
<a href="../16">
C#高级编程(第3版)【全文连载】
</a>
</h1>
<div style="text-align: center; font-size: 15px">
<a href="100165446.htm">
14.4.10 使用证书发布代码
</a>
</div>
<div style="text-align: center; font-size: 15px">
<a class="url" href="../../default.htm">http://book.csdn.net/</a>
2006-10-13 14:41:00
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165446.htm'><font color='red'>14.4.10 使用证书发布代码</font></a></h1>
<div id="divRelateNode" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165443.htm'>14.4.7 代码组权限的更改</a></div><div style='float:right;width:49%'>·<a href='100165444.htm'>14.4.8 权限集的创建和应用</a></div><div style='float:left;width:49%'>·<a href='100165445.htm'>14.4.9 使用强名称发布代码</a></div><div style='float:right;width:49%'>·<a href='100165447.htm'>14.4.11 区域的管理</a></div><div style='float:left;width:49%'>·<a href='100165448.htm'>14.5 小结</a></div><div style='float:right;width:49%'>·<a href='100165449.htm'>15.1 线程</a></div></div>
</div>
</div>
</div>
<!-- main -->
<div id="main">
<div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><h3 style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><a ftel="_Toc507815626"><span lang="EN-US" style="COLOR: black">14.4.10 </span></a><span style="COLOR: black; FONT-FAMILY: 黑体">使用证书发布代码</span></h3>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">上一节讨论了怎样把强名称应用到程序集上,以便系统管理员使用代码访问组明确地把权限赋予与强名称相匹配的程序集。这种安全策略的管理方法非常有效,但是有时它需要在比较高的级别上工作。这样,安全策略的管理员将以软件的发布者</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">而不是各个软件组件</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">为基础把权限赋予程序集。当从具有</span><span lang="EN-US">Authenticode</span><span style="FONT-FAMILY: 宋体">签名的</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 宋体">上下载可执行程序时,会看到与以前相似的方法。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">为了提供软件发布者的信息,可以利用数字证书来标记程序集,让软件的消费者验证软件发布者的身份。在商业化的环境中,可以从</span><span lang="EN-US" style="COLOR: black">Verisign</span><span style="COLOR: black; FONT-FAMILY: 宋体">或</span><span lang="EN-US" style="COLOR: black">Thawte</span><span style="COLOR: black; FONT-FAMILY: 宋体">之类的公司中获取证书。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">从软件厂商购买证书</span><span lang="EN-US" style="COLOR: black">(</span><span style="COLOR: black; FONT-FAMILY: 宋体">而不是创建自己的证书</span><span lang="EN-US" style="COLOR: black">)</span><span style="COLOR: black; FONT-FAMILY: 宋体">的优点是,那些证书可以证明软件有很高的可信度,软件厂商是可信的第三方。但是,为了测试,</span><span lang="EN-US" style="COLOR: black">.NET</span><span style="COLOR: black; FONT-FAMILY: 宋体">提供了一个命令行实用程序,使用它可以创建测试证书。创建证书和使用证书发布软件的过程是相当复杂的,但是,为了说明这个过程,下面给出一个示例,简略地阐述所涉及的问题。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">设想有一个名叫</span><span lang="EN-US" style="COLOR: black">ABC </span><span style="COLOR: black; FONT-FAMILY: 宋体">的公司,下面要为公司的软件产品“</span><span lang="EN-US" style="COLOR: black">ABC Suite</span><span style="COLOR: black; FONT-FAMILY: 宋体">”创建证书。首先,需要创建一个测试证书,方法是执行下面的命令:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><strong><span lang="EN-US" style="COLOR: black">></span></strong><strong><span lang="EN-GB" style="COLOR: black">makecert -sk ABC -n "CN=ABC Corporation" abccorptest.cer</span></strong></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">这个命令为</span><span lang="EN-US" style="COLOR: black">ABC </span><span style="COLOR: black; FONT-FAMILY: 宋体">公司创建了一个测试证书</span><span style="COLOR: black; FONT-FAMILY: 宋体">,</span><span style="COLOR: black; FONT-FAMILY: 宋体">并把所创建的证书保存到</span><span lang="EN-US" style="COLOR: black">abccorptest.cer</span><span style="COLOR: black; FONT-FAMILY: 宋体">文件中。</span><span lang="EN-US" style="COLOR: black">–sk ABC</span><span style="COLOR: black; FONT-FAMILY: 宋体">用于创建密钥容器位置</span><span lang="EN-US" style="COLOR: black">(</span><span style="COLOR: black; FONT-FAMILY: 宋体">公钥加密法将使用这个密钥容器位置</span><span lang="EN-US" style="COLOR: black">)</span><span style="COLOR: black; FONT-FAMILY: 宋体">。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">为了使用证书标记程序集,在包含程序集清单的程序集文件中使用</span><span lang="EN-US" style="COLOR: black">signcode.exe</span><span style="COLOR: black; FONT-FAMILY: 宋体">实用程序。通常,标记程序集的最简单方法就是使用</span><span lang="EN-US" style="COLOR: black">signcode.exe</span><span style="COLOR: black; FONT-FAMILY: 宋体">的向导模式。键入不带参数的</span><span lang="EN-US" style="COLOR: black">signcode.exe</span><span style="COLOR: black; FONT-FAMILY: 宋体">命令,就可以启动向导。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">单击</span><span lang="EN-US">Next</span><span style="FONT-FAMILY: 宋体">按钮,指定要标记的文件位置。对于程序集而言,选择包含清单的文件,如</span><span lang="EN-US">SecurityApp11.exe</span><span style="FONT-FAMILY: 宋体">。<span style="COLOR: black; LETTER-SPACING: -0.1pt">单击</span></span><span lang="EN-US" style="COLOR: black; LETTER-SPACING: -0.1pt">Next</span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">按钮,在</span><span lang="EN-US" style="COLOR: black; LETTER-SPACING: -0.1pt">Signing Options</span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">页面上,</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">选择</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">Custom</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">,定义以前创建的证书文件。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">在下一个对话框中,指定要用于标记程序集的证书。</span><span style="FONT-FAMILY: 宋体">单击</span><span lang="EN-US">Select From File</span><span style="FONT-FAMILY: 宋体">按钮,并浏览到</span><span lang="EN-US">abccorptest.cer</span><span style="FONT-FAMILY: 宋体">文件,将会看到如图</span><span lang="EN-US">14-10</span><span style="FONT-FAMILY: 宋体">所示的确认对话框。</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: -0.2pt">下一个对话框要求指定密钥文件。这个密钥文件是由</span><span lang="EN-US" style="COLOR: black; LETTER-SPACING: -0.2pt">makecert</span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: -0.2pt">实用程序创建的,因此,可以在图</span><span lang="EN-US" style="COLOR: black; LETTER-SPACING: -0.2pt">14-11</span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: -0.2pt">中选择一些选项。加密法服务提供者是一个执行加密标准的应用程序,详见第</span><span lang="EN-US" style="COLOR: black; LETTER-SPACING: -0.2pt">3</span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: -0.2pt">章。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">然后,回答一系列用于标记程序集的加密算法问题</span><span lang="EN-US">(md5</span><span style="FONT-FAMILY: 宋体">或</span><span lang="EN-US">sha1)</span><span style="FONT-FAMILY: 宋体">,指定应用程序的名称及</span><span lang="EN-US">URL</span><span style="FONT-FAMILY: 宋体">,最后是一个确认对话框。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">由于可执行程序已经用证书标记过,因此,程序集的接收者可以访问软件发布者的强证据。因为可信任的第三方证明了发布者的身份,所以运行时可以检查证书,对程序集的发布者与信赖度很高的代码组进行匹配。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">下面详细讨论被标记的程序集。这里使用了测试证书,也可以使用</span><span lang="EN-US">setreg.exe</span><span style="FONT-FAMILY: 宋体">暂时把</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">配置为像处理由可信任的第三方发布的证书那样处理测试证书。使用</span><span lang="EN-US">setreg.exe</span><span style="FONT-FAMILY: 宋体">,可以在注册表中配置公钥和证书。执行下面的命令,机器将配置为信任测试根证书,这样,测试环境就更加有意义了:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><strong><span lang="EN-US" style="COLOR: black">></span></strong><strong><span lang="EN-GB" style="COLOR: black">setreg.exe 1 true</span></strong></p>
<p align="center"><span lang="EN-US"><img height="290" alt="" width="378" border="0" src="14/image010.jpg" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="COLOR: black; FONT-FAMILY: 宋体">图</span><span lang="EN-US" style="COLOR: black"> 14-10</span></p>
<p align="center"><span lang="EN-US"><img height="292" alt="" width="375" border="0" src="14/image011.jpg" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="COLOR: black; FONT-FAMILY: 宋体">图</span><span lang="EN-US" style="COLOR: black"> 14-11</span></p>
<p class="MsoNormal"><span lang="EN-GB" style="COLOR: black">setreg.exe</span><span style="COLOR: black; FONT-FAMILY: 宋体">可以配置为接受此时证书,启用或禁用证书上的过期日期和其他与证书相关的选项。</span><span style="FONT-FAMILY: 宋体">在准备重置该值时,把</span><span lang="EN-US">False</span><span style="FONT-FAMILY: 宋体">作为最后一个参数。使用</span><span lang="EN-US">chktrust.exe</span><span style="FONT-FAMILY: 宋体">实用程序,可以检查程序集,验证它的信任级别,其命令如下所示。</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><strong><span lang="EN-US" style="COLOR: black">></span></strong><strong><span lang="EN-GB">chktrust.exe securityapp11.exe</span></strong></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">执行这个命令,将弹出如图</span><span lang="EN-US" style="COLOR: black">14-12</span><span style="COLOR: black; FONT-FAMILY: 宋体">所示的窗口。</span><span lang="EN-US">Chktrust.exe</span><span style="FONT-FAMILY: 宋体">已经使用证书成功地确认了软件的发布者,此外,它还提醒我们:虽然证书已经被验证,但仍是一个测试证书。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">现在,考虑把机器配置为信任来自</span><span lang="EN-US">ABC</span><span style="FONT-FAMILY: 宋体">公司的软件。为此,可以创建一个新的代码访问组,让这个组与来自</span><span lang="EN-US">ABC</span><span style="FONT-FAMILY: 宋体">公司的软件相匹配。在创建代码访问组之前,首先使用</span><span lang="EN-US">secutil.exe</span><span style="FONT-FAMILY: 宋体">工具,从程序集中获取代表证书的十六进制信息:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><strong><span lang="EN-US" style="COLOR: black">></span></strong><strong><span lang="EN-GB">secutil.exe –hex –x securityapp11.exe</span></strong></p>
<p style="FTEL: 8.15pt" align="center"><span lang="EN-US"><img height="242" alt="" width="331" border="0" src="14/image012.jpg" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="COLOR: black; FONT-FAMILY: 宋体">图</span><span lang="EN-US" style="COLOR: black"> 14-12</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这个命令将输出如下结果:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">Microsoft (R) .NET Framework SecUtil 1.1.4322.573</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">Copyright (c) Microsoft Corp 1999-2002. All rights reserved.</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">X.509 Certificate =</span></p>
<p class="MsoNormal" style="FTEL: 36.45pt"><span lang="EN-US"><img height="165" alt="" width="531" border="0" src="14/image013.jpg" /></span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">现在</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">使用下面的命令创建新的代码组</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">并把</span><span lang="EN-US">FullTrust</span><span style="FONT-FAMILY: 宋体">权限应用到</span><span lang="EN-US">ABC</span><span style="FONT-FAMILY: 宋体">公司发布的程序集上</span><span style="FONT-FAMILY: 宋体">:</span></p>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?