⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssl_intro.html

📁 这个是我在web培训时老师提供的手册
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="keywords" content="Apache, 中文, 手册, 中文版, 中文手册, 中文版手册, 参考手册, 中文参考手册, 金步国" />
<meta name="description" content="Apache 2.2 中文版参考手册" />
<meta name="author" content="金步国" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>SSL/TLS高强度加密:绪论 - Apache 2.2 中文版参考手册</title>
</head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./index.html"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path"><a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">文档</a> &gt; <a href="../index.html">版本2.2</a> &gt; <a href="./index.html">SSL/TLS</a></div>

<div id="translation-info">   <a href="../translator_announcement.html#thanks">致谢</a> | <a href="../translator_announcement.html#announcement">译者声明</a> | 本篇译者:<a href="mailto:&#099;sfr&#0097;nk&#0064;&#099;itiz&#046;n&#0101;t">金步国</a> | 本篇译稿最后更新:2006年1月16日 | <a href="../translator_announcement.html#last_new">获取最新版本</a></div>
<div id="page-content"><div id="preamble"><h1>SSL/TLS高强度加密:绪论</h1>


<blockquote>
<p>标准的好处就是你有充足的选择。如果确实不喜欢现存的标准,你只需等待来年发布一个你喜欢的新标准。</p>

<p class="cite">-- <cite>A. Tanenbaum</cite>, "Introduction to Computer Networks"</p>
</blockquote>

<p>作为绪论,本文针对的是熟悉Web、HTTP、Apache的读者而不是安全方面的专家,它不是SSL协议的权威性指南,不讨论在一个组织中管理证书的特殊技术,也没有重要的法定专利声明及摘录和引用限制。但是,本文会通过综合讲述各种概念、定义和例子,给<code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>的使用者提供背景资料,作为更深入探索的起点。</p>

<p>这里的内容主要是来源于<a href="http://home.comcast.net/~fjhirsch/Papers/wwwj/">Introducing SSL and Certificates using SSLeay</a>并经过作者<a href="http://home.comcast.net/~fjhirsch/">Frederick J. Hirsch</a>许可。此文由 Open Group Research Institute于1997年夏,发表在<a href="http://www.ora.com/catalog/wjsum97/">Web Security: A Matter of Trust</a>, World Wide Web Journal, Volume 2, Issue 3, Summer 1997,肯定意见请反馈给<a href="mailto:hirsch@fjhirsch.com">Frederick Hirsch</a>(原作者),反对意见请反馈给<a href="mailto:rse@engelschall.com">Ralf S. Engelschall</a>(<code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>的作者)。</p>
</div>
	<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="cryptographictech" id="cryptographictech">密码技术</a></h2>

<p>要理解SSL就必须理解密码系统、消息摘要函数(单向或散列函数)和数字签名,这些技术是许多文献所讨论的主题(比如[<a href="#AC96">AC96</a>),提供了保密性、完整性和认证的基础。</p>

<h3><a name="cryptographicalgo" id="cryptographicalgo">密码系统</a></h3>

    <p>假设Alice想给她的银行发一个消息以划转资金,并希望这个消息是保密的,因为其中含有她的帐号和划转金额等信息。一种方案是使用密码系统,将要传输的信息转变为加密形式,从而只能为希望他读懂的人读懂。一旦加密为这种形式,这条消息也许只能用一个密钥来破译,如果没有,那么这条信息毫无用处,因为好的密码系统可以使破译难度高到入侵者认为原文不值得他们花费那么大的努力。</p>

    <p>密码系统有两大类:常规的和公共密钥。</p>

    <dl>
    <dt>常规密码</dt>
    <dd>又称为对称密码,需要发送者和接收者共同持有一个密钥:一小段用来加密和解密的秘密信息。如果这个密钥是保密的,那么这条消息除了发送者和接受者以外可能没有人可以阅读。如果Alice和银行共同持有一个密钥,则可以互相发送保密信息。但是,私有通讯密钥的选择行为本身,却可能不是无懈可击的。</dd>

    <dt>公共密钥密码</dt>
    <dd>又称为不对称密码,定义了一种使用两个密钥的算法以解决密钥交换问题,一个密钥用于加密,另一个用于解密,从而使简单公布一个密钥(公共的密钥,简称:公钥)而保留其他的(私有的密钥,简称:私钥)以接收保密消息成为可能。</dd>
    </dl>

    <p>任何人都可以用公钥加密一条消息,而仅允许私钥的持有者阅读。如此,Alice就可能使用公钥加密其保密消息,发送给私钥的持有者(银行),只有银行能够对它解密。</p>


	<h3><a name="messagedigests" id="messagedigests">消息摘要</a></h3>

    <p>虽然Alice可能加密其消息使它称为私有的,但仍应注意到某些人可能会篡改或替换其原始消息,以划转资金到他们自己的帐户。一种保证Alice消息完整性的方法是同时发一个其消息的简单摘要给银行,供银行与消息本身比对,如果相符则消息正确。</p>

    <p>这样的方法被称为<dfn>消息摘要</dfn>、<em>单向函数</em>或<em>散列函数</em>。消息摘要用于对较大而且变长的消息建立较短而且等长的一种表述,其设计使将摘要还原成消息极其困难,而且对两个不同的消息几乎不可能生成相同的摘要,从而排除了替换一个消息为另一个而维持相同摘要的可能性。</p>

    <p>Alice面临的另一个挑战是要保证摘要发送到银行的安全,如此,才能确保消息的完整性。</p>
    
    <p>一种解决方法是在摘要中包含数字签名。</p>


<h3><a name="digitalsignatures" id="digitalsignatures">数字签名</a></h3>
<p>当Alice发送消息到银行,银行需要确认此消息的确是她发送的,而不是入侵者盗用其帐号。为此,可以在消息中包含一个由Alice建立的<em>数字签名</em>。</p>

<p>数字签名是以加密的消息摘要和其他信息(比如一个流水号)以及发送者的私有密钥建立的。虽然任何人都可能用公共密钥<em>解密</em>签名,但是只有签发者知道其私有密钥,也就是,只有密钥的持有者才能签发。包含在签名中的摘要只对该消息有效,以确保没有人可以改变摘要而保持签名不变。</p>
<p>为了避免签名日后被入侵者破译和再利用,签名包含有一个流水号。如此,万一(只是假设)Alice并没有发送此消息,虽然她可能真的签发过,银行可以免遭其欺诈性指控。</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="certificates" id="certificates">证书</a></h2>

<p>虽然Alice可能已经发送了一个保密的消息给银行,签了名,并可以保证消息的完整性,但是她仍然需要确认她的确是在和那个银行通讯,也就是说,她需要确认她用的公共密钥的确对应于银行用的私有密钥。同样,银行也需要验证此消息的签名的确对应于Alice的签名。</p>

<p>如果各部分有验证其余部分一致性的证书,以确认公共密钥,并是由一个可以信任的代理所签发的,那么他们双方都可以肯定其通讯对象的身份。这个可以信任的代理称为<em>证书机构(Certificate Authority)</em>,其证书用于认证。</p>

<h3><a name="certificatecontents" id="certificatecontents">证书的内容</a></h3>

    <p>与一个公共密钥关联的证书有一个主题,即一个个体或者服务器或者其他实体的真实身份,如<a href="#table1">表1</a>所示。主题中的信息包含身份信息(识别名[Distinguished Name])和公共密钥,还包括发布此证书的证书机构的名称和签名以及证书的有效期限,还可能会有证书机构监管者信息和流水号等附加信息。</p>

    <h4><a name="table1" id="table1">表 1: Certificate Information</a></h4>
    
    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>Subject</th><td>Distinguished Name, Public Key</td></tr>
<tr><th>Issuer</th><td>Distinguished Name, Signature</td></tr>
<tr><th>Period of Validity</th><td>Not Before Date, Not After Date</td></tr>
<tr><th>Administrative Information</th><td>Version, Serial Number</td></tr>
<tr><th>Extended Information</th><td>Basic Constraints, Netscape Flags, etc.</td></tr>
</table>
    

    <p>识别名用于在一个特定的上下文中指明身份,比如,一个个体可能有一个个人证书,同时还有一个其雇佣者的证书。X.509标准[<a href="#X509">X509</a>]中定义了识别名的各个项及其名称和缩写(见<a href="#table2">表2</a>)。</p>

    <h4><a name="table2" id="table2">表 2: Distinguished Name Information</a></h4>
    
    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="bordered">
<tr><th>DN Field</th><th>Abbrev.</th><th>Description</th><th>Example</th></tr>
<tr><td>Common Name</td><td>CN</td><td>Name being certified</td><td>CN=Joe Average</td></tr>
<tr><td>Organization or Company</td><td>O</td><td>Name is associated with this<br />organization</td><td>O=Snake Oil, Ltd.</td></tr>
<tr><td>Organizational Unit</td><td>OU</td><td>Name is associated with this <br />organization unit, such
        as a department</td><td>OU=Research Institute</td></tr>
<tr><td>City/Locality</td><td>L</td><td>Name is located in this City</td><td>L=Snake City</td></tr>
<tr><td>State/Province</td><td>ST</td><td>Name is located in this State/Province</td><td>ST=Desert</td></tr>
<tr><td>Country</td><td>C</td><td>Name is located in this Country (ISO code)</td><td>C=XZ</td></tr>
</table>
    

    <p>证书机构可能会定义规定哪些识别名是可选的,而哪些是必须的一个规范,还可能对项的内容和证书使用人数有所要求。比如,一个Netscape浏览器要求证书中的Common Name项必须是服务器名称,此名称可以是服务器域名的通配模式,形如:<code>*.snakeoil.com</code> 。</p>

    <p>证书的二进制形式用ASN.1记号法[<a href="#X208">X208</a>] [<a href="#PKCS">PKCS</a>]表示,记号法定义了如何表示内容,编码规则定义了如何将信息转变成二进制形式。证书的二进制编码使用了基于更通用的基本编码规则(Basic Encoding Rules[BER])的识别名编码规则(Distinguished Encoding Rules[DER])。为了在不能处理二进制的情况下进行传输,二进制形式用Base64编码方式[<a href="#MIME">MIME</a>]转换成ASCII形式,其编码结果是以开始和结束符号分隔的若干的行,称为PEM形式(其名称来源于"Privacy Enhanced Mail"),如下所示:</p>

    <div class="example"><h3>Example of a PEM-encoded certificate (snakeoil.crt)</h3><pre>-----BEGIN CERTIFICATE-----
MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
A1UEChMOU25ha2UgT2lsLCBMdGQxHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1dGhv
cml0eTEVMBMGA1UEAxMMU25ha2UgT2lsIENBMR4wHAYJKoZIhvcNAQkBFg9jYUBz
bmFrZW9pbC5kb20wHhcNOTgxMDIxMDg1ODM2WhcNOTkxMDIxMDg1ODM2WjCBpzEL
MAkGA1UEBhMCWFkxFTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25h
a2UgVG93bjEXMBUGA1UEChMOU25ha2UgT2lsLCBMdGQxFzAVBgNVBAsTDldlYnNl
cnZlciBUZWFtMRkwFwYDVQQDExB3d3cuc25ha2VvaWwuZG9tMR8wHQYJKoZIhvcN
AQkBFhB3d3dAc25ha2VvaWwuZG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
gQDH9Ge/s2zcH+da+rPTx/DPRp3xGjHZ4GG6pCmvADIEtBtKBFAcZ64n+Dy7Np8b
vKR+yy5DGQiijsH1D/j8HlGE+q4TZ8OFk7BNBFazHxFbYI4OKMiCxdKzdif1yfaa
lWoANFlAzlSdbxeGVHoT0K+gT5w3UxwZKv2DLbCTzLZyPwIDAQABoyYwJDAPBgNV
HRMECDAGAQH/AgEAMBEGCWCGSAGG+EIBAQQEAwIAQDANBgkqhkiG9w0BAQQFAAOB
gQAZUIHAL4D09oE6Lv2k56Gp38OBDuILvwLg1v1KL8mQR+KFjghCrtpqaztZqcDt
2q2QoyulCgSzHbEGmi0EsdkPfg6mp0penssIFePYNI+/8u9HT4LuKMJX15hxBam7
dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
-----END CERTIFICATE-----</pre></div>


<h3><a name="certificateauthorities" id="certificateauthorities">证书机构</a></h3>

    <p>证书机构在授予证书前会验证证书的申请信息,以确认密钥对中私有密钥的持有实体。比如:如果Alice申请一个个人证书,则证书机构首先会确认Alice的确是申请证书的那个人。</p>

    <h4><a name="certificatechains" id="certificatechains">证书链</a></h4>
    
        <p>一个证书机构也可能给另一个证书机构授予证书。所以,Alice可能需要检查证书的授予者,及其父授予者,直到找到一个她所信任的。她可以只信任由一个有限的授予者链所授予的证书,以减小这个链中"劣质"证书带来的风险。</p>
    

        <h4><a name="rootlevelca" id="rootlevelca">建立顶级CA</a></h4>
    
        <p>如前所述,每个证书要求其授予者指定证书主题中实体的有效性,直到最高一级的证书机构。这样就产生一个问题:最高一级的证书机构没有授予者,那么谁为它的证书作担保呢?仅在这种情况下,此证书是"自签名的",即证书的授予者和主题中的一样,所以,必须对自签名的证书备加注意。顶级机构广泛发布的公共密钥可以减小信任这个密钥所带来的风险--这显然比其他某个人发布密钥并宣称他是证书机构要安全一些。浏览器被默认地配置为信任著名的证书机构。</p>

        <p>许多公司是专业证书机构,如<a href="http://www.thawte.com/">Thawte</a>和<a href="http://www.verisign.com/">VeriSign</a>,提供如下服务:</p>

        <ul>
        <li>验证证书的申请</li>
        <li>处理证书的申请</li>
        <li>授予和管理证书</li>
        </ul>

        <p>自己建立一个证书机构也是可能的,虽然在Internet环境中有风险,但在验证个体或服务器较容易的Intranet环境中,会很有用。</p>
    

    <h4><a name="certificatemanagement" id="certificatemanagement">证书的管理</a></h4>
    
        <p>建立一个证书机构需要一个坚强的监管、技术和管理体系。证书机构不仅仅是授予证书,还必须管理证书的有效期和更新,并维护一个已授予的但已经失效的证书列表(作废证书列表[Certificate Revocation Lists,或CRL])。比如,Alice作为公司雇员有资格申请证书,又如,Alice离开公司后需要作废此证书等。由于凭证书可以到处通行无阻,所以不可能从证书本身看出已经作废,因此,验证证书的有效性就必须查作废证书列表(而这通常不是自动处理的一部分)。</p>

        <div class="note"><h3>说明</h3>
        <p>如果使用了一个浏览器没有默认配置的证书机构,则必须加载这个证书机构的证书进入浏览器,使浏览器可以验证由这个证书机构签发的服务器证书。这样做是有风险的,因为一旦加载,浏览器会接受由这个证书机构签发的所有证书。</p>
        </div>


</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="ssl" id="ssl">安全套接字层(SSL)</a></h2>

<p>安全套接字层协议是位于可靠的面向连接的网络层协议(如TCP/IP)和应用程序协议层(如HTTP)之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。</p>

<p>这个协议被设计为支持许多用于密码、摘要和签名的特定算法,允许因各种目的对特定的服务器选择算法,并允许采用新算法以得其利。其选择的协商操作发生在客户和服务器建立协议对话的开始阶段。</p>

<h3><a name="table4" id="table4">表 4: Versions of the SSL protocol</a></h3>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -