数字证书和SSL的学习

来源:互联网 发布:做软件的公司 编辑:程序博客网 时间:2024/05/05 20:57

在11年认真学习过,但是现在感觉又有一些含糊了,再次认真的学习一次,把上次没有理解清楚的理解清楚。

感觉百度百科还是没有讲清楚,http://baike.baidu.com/link?url=xjiEs8WXu9XjP708hgVrDNDGwhnJ-hYyc4zM-TBike9apEdVjIqNbCHYPCBWesQ78JAwIKFUKLOqjScB5fK5S_

再看互动百科,http://www.baike.com/wiki/%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6


之前的笔记还是有些简单,没有讲清楚根本的道理,这次再次研究,进行补充,在反复思考的过程中,不断发现自己理解的偏差、遗漏,不断完善。

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构——CA机构(如GlobalSign),又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名

以上是互动百科的定义。


数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。

以上是百度百科的定义,从此看出百度百科的定义相对更加准确一些。


维基百科又不一样了:https://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6%E8%AE%A4%E8%AF%81%E6%9C%BA%E6%9E%84

CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。在SET交易中,CA不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。

CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

CA 也拥有一个证书(内含公钥)和私钥。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。

如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。

如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。

为保证用户之间在网上传递信息的安全性、真实性、可靠性、完整性和不可抵赖性,不仅需要对用户的身份真实性进行验证,也需要有一个具有权威性、公正性、唯一性的机构,负责向电子商务的各个主体颁发并管理符合国内、国际安全电子交易协议标准的电子商务安全证,并负责管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。”。


这个地方说的又和百度百科不一样了,主要集中在密钥这块,密钥是由CA机构来产生了,这个可能是不对的,如果这样的话,那么私钥怎么办?怎么传递给用户呢?是通过电子信封吗?


https://en.wikipedia.org/wiki/Digital_signature”,英文的维基没有提到这一点。


以下仍然引子百度百科:




24.9 ISO鉴别框架

    建议将公开密钥密码学与ISO鉴别框架一起使用,ISO鉴别框架也称为X.509协议[304]。此框架提供了网间鉴别功能。尽管没有为鉴别或安全提定一个特别的算法,但建议使用RSA,当然还可选择多种算法和散列函数。X.509最初于1988年公布。在公开讨论后,于1993年作了一些安全问题的修正[1100、750]。”

以上摘自《应用密码学 协议、算法与C源程序 Applied Cryptography protocols, algorithms, and source code in C Second Edition(美)Bruce Schneier 吴世忠 祝世雄 张文政 机械工业出版社》。


“数字证书,就是保存你生成的RSA的公钥,然后再附上一些你个人的信息,别人可以去官方机构CA来验证配合这个公钥的个人信息是否存在,是否真实。

当获得了这个证书是真实有效后,别人就可以相信这个公钥是你给他的,然后就可以使用这个公钥来加密或者做数字签名,发送数据给你。


整个过程就是让别的人相信这个公钥的来源,由官方组织来证明这个事情。”

以上内容为上次总结,现在看来是存在一些理解的错误的。

1.如果是这样的话,那么和这个公钥配对的私钥保存在哪里?保存在CA机构?那么证书如何完成解密工作呢?

2.CA机构如何去认证你的这个证书呢?


参考以下内容:(摘自http://www.wosign.com/Basic/howsslwork.htm

SSL工作原理

SSL 是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议 (HTTP)使用 SSL 来实现安全的通信。

在客户端与服务器间传输的数据是通过使用对称算法(如 DES 或 RC4)进行加密的。公用密钥算法(通常为 RSA)是用来获得加密密钥交换和数字签名的,此算法使用服务器的SSL数字证书中的公用密钥。有了服务器的SSL数字证书,客户端也可以验证服务器的身份。SSL 协议的版本 1 和 2 只提供服务器认证。版本 3 添加了客户端认证,此认证同时需要客户端和服务器的数字证书。

SSL 握手

SSL 连接总是由客户端启动的。在SSL 会话开始时执行 SSL 握手。此握手产生会话的密码参数。关于如何处理 SSL 握手的简单概述,如下图所示。此示例假设已在 Web 浏览器 和 Web 服务器间建立了 SSL 连接。

图 SSL的客户端与服务器端的认证握手 

(1) 客户端发送列出客户端密码能力的客户端“您好”消息(以客户端首选项顺序排序),如 SSL 的版本、客户端支持的密码对(加密套件)和客户端支持的数据压缩方法(哈希函数)。消息也包含 28 字节的随机数。

(2) 服务器以服务器“您好”消息响应,此消息包含密码方法(密码对)和由服务器选择的数据压缩方法,以及会话标识和另一个随机数。 
  注意:客户端和服务器至少必须支持一个公共密码对,否则握手失败。服务器一般选择最大的公共密码对。

(3) 服务器发送其SSL数字证书。(服务器使用带有 SSL 的 X.509 V3 数字证书。) 
    如果服务器使用 SSL V3,而服务器应用程序(如 Web 服务器)需要数字证书进行客户端认证,则客户端会发出“数字证书请求”消息。在 “数字证书请求”消息中,服务器发出支持的客户端数字证书类型的列表和可接受的CA的名称。

(4) 服务器发出服务器“您好完成”消息并等待客户端响应。

(5) 一接到服务器“您好完成”消息,客户端( Web 浏览器)将验证服务器的SSL数字证书的有效性并检查服务器的“你好”消息参数是否可以接受。 
   如果服务器请求客户端数字证书,客户端将发送其数字证书;或者,如果没有合适的数字证书是可用的,客户端将发送“没有数字证书”警告。此警告仅仅是警告而已,但如果客户端数字证书认证是强制性的话,服务器应用程序将会使会话失败。

(6) 客户端发送“客户端密钥交换”消息。此消息包含 pre-master secret (一个用在对称加密密钥生成中的 46 字节的随机数字),和 消息认证代码 ( MAC )密钥(用服务器的公用密钥加密的)。 
   如果客户端发送客户端数字证书给服务器,客户端将发出签有客户端的专用密钥的“数字证书验证”消息。通过验证此消息的签名,服务器可以显示验证客户端数字证书的所有权。 
   注意: 如果服务器没有属于数字证书的专用密钥,它将无法解密 pre-master 密码,也无法创建对称加密算法的正确密钥,且握手将失败。

(7) 客户端使用一系列加密运算将 pre-master secret 转化为 master secret ,其中将派生出所有用于加密和消息认证的密钥。然后,客户端发出“更改密码规范” 消息将服务器转换为新协商的密码对。客户端发出的下一个消息(“未完成”的消息)为用此密码方法和密钥加密的第一条消息。

(8) 服务器以自己的“更改密码规范”和“已完成”消息响应。

(9) SSL 握手结束,且可以发送加密的应用程序数据。

这个是一个证书使用的场景,但是同样没有解释私钥在哪里,在"客户端生成随机对称密钥,并用服务器的公用密钥加密“后,服务端是如何解密的呢?

SSL Certificates have a key pair: a public and a private key. These keys work together to establish an encrypted connection. The certificate also contains what is called the “subject,” which is the identity of the certificate/website owner.

To get a certificate, you must create a Certificate Signing Request (CSR) on your server. This process creates a private key and public key on your server. The CSR data file that you send to the SSL Certificate issuer (called a Certificate Authority or CA) contains the public key. The CA uses the CSR data file to create a data structure to match your private key without compromising the key itself. The CA never sees the private key.

Once you receive the SSL Certificate, you install it on your server. You also install an intermediate certificate that establishes the credibility of your SSL Certificate by tying it to your CA’s root certificate. The instructions for installing and testing your certificate will be different depending on your server.

In the image below, you can see what is called the certificate chain. It connects your server certificate to your CA’s (in this case DigiCert’s) root certificate through an intermediate certificate.

获取证书时,要先生成一对密钥,然后发起”认证签名请求“,在这个请求里面要包含你的公钥,当这个请求被确认和回复后,你就获得了SSL证书,证书的内容如上文所讲,这样你的这个公钥便具有了权威性,值得信赖了,当SSL客户端发起请求时,你就可以把这个证书发给它,它可以去上一级的认证机构去确认这个证书,从而也就确认了这个公钥是否可以使用,然后客户端生成对称密钥,用这个公钥加密后传送给服务器,从而达到了密钥交换的目的。

How Does the SSL Certificate Create a Secure Connection?

When a browser attempts to access a website that is secured by SSL, the browser and the web server establish an SSL connection using a process called an “SSL Handshake” (see diagram below). Note that the SSL Handshake is invisible to the user and happens instantaneously.

Essentially, three keys are used to set up the SSL connection: the public, private, and session keys. Anything encrypted with the public key can only be decrypted with the private key, and vice versa.

Because encrypting and decrypting with private and public key takes a lot of processing power, they are only used during the SSL Handshake to create a symmetric session key. After the secure connection is made, the session key is used to encrypt all transmitted data.


  1. Browser connects to a web server (website) secured with SSL (https). Browser requests that the server identify itself.
  2. Server sends a copy of its SSL Certificate, including the server’s public key.
  3. Browser checks the certificate root against a list of trusted CAs and that the certificate is unexpired, unrevoked, and that its common name is valid for the website that it is connecting to. If the browser trusts the certificate, it creates, encrypts, and sends back a symmetric session key using the server’s public key.
  4. Server decrypts the symmetric session key using its private key and sends back an acknowledgement encrypted with the session key to start the encrypted session.
  5. Server and Browser now encrypt all transmitted data with the session key.


上面这段文字讲的要比wosign更加清楚,注意“Server decrypts the symmetric session key using its private key”,这个是关键的一环。


还有一个知识点,即证书链的概念,即证书发布机构逐级认证,认证的关键点就是证书的签名。


根证书是怎么一回事?

https://en.wikipedia.org/wiki/Root_certificate

In cryptography and computer security, a root certificate is an unsigned or a self-signed public key certificate that identifies the Root Certificate Authority (CA).[1] A root certificate is part of a public key infrastructure scheme. The most common commercial variety is based on the ITU-T X.509 standard, which normally includes a digital signature from a certificate authority (CA).

Digital certificates are verified using a chain of trust. The trust anchor for the digital certificate is the Root Certificate Authority (CA).[2]

certificate authority can issue multiple certificates in the form of a tree structure. A root certificate is the top-most certificate of the tree, the private key of which is used to "sign" other certificates. All certificates immediately below the root certificate inherit the trustworthiness of the root certificate – a signature by a root certificate is somewhat analogous to "notarizing" an identity in the physical world. Certificates further down the tree also depend on the trustworthiness of the intermediates (often known as "subordinate certification authorities").

Many software applications assume these root certificates are trustworthy on the user's behalf. For example, a web browser uses them to verify identities within SSL/TLS secure connections. However, this implies that the user trusts their browser's publisher, the certificate authorities it trusts, and any intermediates the certificate authority may have issued a certificate-issuing-certificate, to faithfully verify the identity and intentions of all parties that own the certificates. This (transitive) trust in a root certificate is the usual case and is integral to the X.509 certificate chain model.

The root certificate is usually made trustworthy by some mechanism other than a certificate, such as by secure physical distribution. For example, some of the most well-known root certificates are distributed in the Internet browsers by their manufacturers. Microsoft distributes root certificates belonging to members of the Microsoft Root Certificate Program toWindows desktops and Windows Phone 8.[3]


根证书位于证书树的最高级,它使用它的私钥对其它证书进行签名。"All certificates mmediately……”在这里不当“立刻”讲,是直接的意思,直接位于根证书下面的证书继承根证书的可信赖性。

notarize:

  • vt. 确认;证明
  • 当公证来理解。

transitive

  • adj. 及物的;过渡的;可迁的
  • n. 传递;及物动词
  • subordinate certification authorities
  • subordinate
  • n. 下属,下级;部属,属下
  • adj. 从属的;次要的
  • vt. 使……居下位;使……服从
  • 从属的证书机构。

根证书的作用?

信任的传递是根证书的主要作用。



证书机构具备两个密钥,一对非对称密钥,根证书就是用私钥对自身进行签名,传递公钥出来。

其它的证书也是用这个私钥进行签名,不过需要到CA机构或者使用根证书里面的公钥进行验签。


自签名是怎么一回事?

https://en.wikipedia.org/wiki/Self-signed_certificate,使用私钥对自身进行数字签名。

In cryptography and computer security, a self-signed certificate is an identity certificate that is signed by the same entity whose identity it certifies. This term has nothing to do with the identity of the person or organization that actually performed the signing procedure. In technical terms a self-signed certificate is one signed with its own private key.

In typical public key infrastructure (PKI) arrangements, a digital signature from a certificate authority (CA) attests that a particular public key certificate is valid (i.e., contains correct information).


http://www.cnblogs.com/hyddd/archive/2009/01/07/1371292.html这个帖子讲的不错,只是其中一幅图链接失效了。


其实还存在一个问题,就是数字证书的认证,是去CA请求呢?还是需要下载根证书呢?好像都是通过后者的方式进行认证。


附录:

PKI 基础知识

(摘自Microsoft Windows 2000 Server白皮书,2000年7月5日发布)

摘要

本白皮书介绍了加密和公钥基本结构(PKI)的概念和使用 Microsoft Windows 2000 Server 操作系统中的证书服务的基础知识。如果您还不熟悉加密和公钥技术,先阅读本白皮书将有助于理解 Windows 2000 Web 站点上有关这些主题的其它技术白皮书。

引言

Microsoft Windows 2000 证书服务提供的集成的公钥基本结构(PKI)使电子商务能够在安全的环境中进行。本白皮书介绍了加密和 PKI 的概念。理解这些相关概念是理解证书服务功能的先决条件,证书服务是 Microsoft Windows 2000 Server 操作系统中的一个组件。

加密概念

加密是通过 Intranet、Extranet 和 Internet 进行安全的信息交换的基础。从业务的角度来看,通过加密实现的安全功能包括: 身份验证 ,使收件人确信发件人就是他或她所声明的那个人; 机密性 ,确保只有预期的收件人能够阅读邮件;以及 完整性 ,确保邮件在传输过程中没有被更改。从技术的角度来看,加密是利用数学方法将邮件转换为不可读格式从而达到保护数据的目的的一门科学。

本节介绍下列加密概念:

对称密钥加密:一个密钥

公钥加密:两个密钥

单向散列算法

数字签名:结合使用公钥与散列

密钥交换:结合使用对称密钥与公钥

前三个小节分别定义并说明对称密钥加密、公钥加密和散列算法。后两个小节说明 组合使用 这些技术的方法-尤其是,将公钥算法与散列算法相结合以创建数字签名,以及将对称算法与公钥算法相结合使交换密(私)钥成为可能。

对称密钥加密:一个密钥

对称密钥加密,也叫做共享密钥加密或机密密钥加密,使用发件人和收件人共同拥有的单个密钥。这种密钥既用于加密,也用于解密,叫做 机密密钥 (也称为 对称密钥 或 会话密钥 )。对称密钥加密是加密大量数据的一种行之有效的方法。.

对称密钥加密有许多种算法,但所有这些算法都有一个共同的目的-以可还原的方式将 明文 (未加密的数据)转换为 暗文 。暗文使用加密密钥编码,对于没有解密密钥的任何人来说它都是没有意义的。由于对称密钥加密在加密和解密时使用相同的密钥,所以这种加密过程的安全性取决于是否有未经授权的人获得了对称密钥。这就是它为什么也叫做机密密钥加密的原因。希望使用对称密钥加密通信的双方,在交换加密数据之前必须先安全地交换密钥。

衡量对称算法优劣的主要尺度是其密钥的长度。密钥越长,在找到解密数据所需的正确密钥之前必须测试的密钥数量就越多。需要测试的密钥越多,破解这种算法就越困难。有了好的加密算法和足够长的密钥,如果有人想在一段实际可行的时间内逆转转换过程,并从暗文中推导出明文,从计算的角度来讲,这种做法是行不通的。

公钥加密:两个密钥

公钥加密使用两个密钥- 一个公钥 和 一个私钥 ,这两个密钥在数学上是相关的。为了与对称密钥加密相对照,公钥加密有时也叫做不对称密钥加密。在公钥加密中,公钥可在通信双方之间公开传递,或在公用储备库中发布,但相关的私钥是保密的。只有使用私钥才能解密用公钥加密的数据。使用私钥加密的数据只能用公钥解密。在图 1 中,发件人拥有收件人的公钥,并用它加密了一封邮件,但只有收件人掌握解密该邮件的有关私钥。

 

图 1 公钥加密要求使用一个公钥和一个私钥。

与对称密钥加密相似,公钥加密也有许多种算法。然而,对称密钥和公钥算法在设计上并无相似之处。您可以在程序内部使用一种对称算法替换另一种,而变化却不大,因为它们的工作方式是相同的。而另一方面,不同公钥算法的工作方式却完全不同,因此它们不可互换。

公钥算法是复杂的数学方程式,使用十分大的数字。公钥算法的主要局限在于,这种加密形式的速度相对较低。实际上,通常仅在关键时刻才使用公钥算法,如在实体之间交换对称密钥时,或者在签署一封邮件的散列时(散列是通过应用一种单向数学函数获得的一个定长结果,对于数据而言,叫做散列算法)。将公钥加密与其它加密形式(如对称密钥加密)结合使用,可以优化性能。公钥加密提供了一种有效的方法,可用来把为大量数据执行对称加密时使用的机密密钥发送给某人。也可以将公钥加密与散列算法结合使用以生成数字签名。

若要进一步了解关于将公钥加密与对称密钥加密或散列算法结合使用的信息,请参见下面两节:“数字签名: 结合使用公钥与散列算法”和“密钥交换:结合使用对称密钥与公钥”

将公钥加密用于数字签名

数字签名是邮件、文件或其它数字编码信息的发件人将他们的身份与信息绑定在一起(即为信息提供签名)的方法。对信息进行数字签名的过程,需要将信息与由发件人掌握的秘密信息一起转换为叫做签名的标记。数字签名用于公钥环境中,它通过验证发件人确实是他或她所声明的那个人,并确认收到的邮件与发送的邮件完全相同,来帮助确保电子商务交易的安全。

通常,数字签名用于以明文(如电子邮件)分发数据的情形。在这种情况下,当邮件本身的敏感性可能无法保证加密的安全性时,确保数据处于其原始格式且并非由假冒者发送,是非常重要的。

要了解如何结合使用公钥与散列算法来创建数字签名,请参见下面的“数字签名: 结合使用公钥与散列算法”一节

常用公钥算法

下面是三种最常用的公钥算法:

RSA -适用于数字签名和密钥交换。 Rivest-Shamir-Adleman (RSA) 加密算法是目前应用最广泛的公钥加密算法,特别适用于通过 Internet 传送的数据。这种算法以它的三位发明者的名字命名:Ron Rivest、Adi Shamir 和 Leonard Adleman。RSA 算法的安全性基于分解大数字时的困难(就计算机处理能力和处理时间而言)。在常用的公钥算法中,RSA 与众不同,它能够进行数字签名和密钥交换运算。Microsoft Base Cryptographic Service Provider (Microsoft Base CSP 1 ) 支持 RSA 加密算法,并且 Microsoft Enhanced Cryptographic Service Provider (Microsoft Enhanced CSP 2 ) 已经内置到包括 Microsoft Internet Explorer 在内的许多软件产品中。

DSA -仅适用于数字签名。 数字签名算法 (Digital Signature Algorithm, DSA) 由美国国家安全署 (United States National Security Agency, NSA) 发明,已经由美国国家标准与技术协会 (National Institute of Standards and Technology, NIST) 收录到联邦信息处理标准 (Federal Information Processing Standard, FIPS) 之中,作为数字签名的标准。DSA 算法的安全性源自计算离散算法的困难。这种算法仅用于数字签名运算(不适用于数据加密)。Microsoft CSP 支持 DSA 算法。

Diffie-Hellman -仅适用于密钥交换。 Diffie-Hellman 是发明的第一个公钥算法,以其发明者 Whitfield Diffie 和 Martin Hellman 的名字命名。Diffie-Hellman 算法的安全性源自在一个有限字段中计算离散算法的困难。Diffie-Hellman 算法仅用于密钥交换。Microsoft Base DSS 3 和 Diffie-Hellman CSP 都支持 Diffie-Hellman 算法。

单向散列算法

散列-也称为 散列值 或 消息摘要 ,是一种与基于密钥(对称密钥或公钥)的加密不同的数据转换类型。散列就是通过把一个叫做散列算法的单向数学函数应用于数据,将任意长度的一块数据转换为一个定长的、不可逆转的数字。所产生的散列值的长度应足够长,因此使找到两块具有相同散列值的数据的机会很少。发件人生成邮件的散列值并加密它,然后将它与邮件本身一起发送。而收件人同时解密邮件和散列值,并由接收到的邮件产生另外一个散列值,然后将两个散列值进行比较。如果两者相同,邮件极有可能在传输期间没有发生任何改变。

常用的单向散列函数

下面是两个最常用的散列函数:

MD5 。 MD5 是由 Ron Rivest 设计的可产生一个 128 位的散列值的散列算法。MD5 设计经过优化以用于 Intel 处理器。这种算法的基本原理已经泄露,这就是为什么它不太受欢迎的原因。

SHA-1 。 与 DSA 公钥算法相似,安全散列算法 1(SHA-1)也是由 NSA 设计的,并由 NIST 将其收录到 FIPS 中,作为散列数据的标准。它可产生一个 160 位的散列值。SHA-1 是流行的用于创建数字签名的单向散列算法。

数字签名:结合使用公钥与散列算法

可以结合使用公钥技术与散列算法来创建数字签名。数字签名可用作数据完整性检查并提供拥有私钥的凭据。

签署和验证数据(由启用 PKI 的应用程序如 Microsoft Outlook 完成)的步骤如下:

发件人将一种散列算法应用于数据,并生成一个散列值。

发件人使用私钥将散列值转换为数字签名。

然后,发件人将数据、签名及发件人的证书发给收件人。

收件人将该散列算法应用于接收到的数据,并生成一个散列值。

收件人使用发件人的公钥和新生成的散列值验证签名。

对用户而言这一过程是透明的。

散列算法处理数据的速度比公钥算法快得多。散列数据还缩短了要签名的数据的长度,因而加快了签名过程。当创建或验证签名时,公钥算法必须且只需转换散列值(128 或 160 位的数据)。创建签名和验证签名的详细步骤取决于所采用的公钥算法。

密钥交换:结合使用对称密钥与公钥

对称密钥算法非常适合于快速并安全地加密数据。但其缺点是,发件人和收件人必须在交换数据之前先交换机密密钥。结合使用加密数据的对称密钥算法与交换机密密钥的公钥算法可产生一种既快速又灵活的解决方案。

基于公钥的密钥交换步骤如下:

发件人获得收件人的公钥。

发件人创建一个随机机密密钥(在对称密钥加密中使用的单个密钥)。在 Windows 2000 中,CryptoAPI 4 可用于创建机密密钥。(有关 CryptoAPI 的详细信息,请参见下面的“证书链验证”一节。)

发件人使用机密密钥和对称密钥算法将明文数据转换为暗文数据。

发件人使用收件人的公钥将机密密钥转换为暗文机密密钥。

发件人将暗文数据和暗文机密密钥一起发给收件人。

收件人使用其私钥将暗文机密密钥转换为明文。

收件人使用明文机密密钥将暗文数据转换为明文数据。

同样,这些步骤是由启用 PKI 的应用程序(如 Microsoft Outlook)来完成的,并且对用户来说是透明的。

公钥基本结构的概念

术语公钥基本结构(PKI)用于描述管制或操纵证书与公钥及私钥的策略、标准和软件。实际上,PKI 是指由数字证书、证书颁发机构 (CA) 以及对电子交易所涉及各方的合法性进行检查和验证的其它注册机构组成的一套系统。PKI 的有关标准仍处于不断发展之中,即使这些标准已被作为电子商务的要素而广泛实施。

本节帮助您理解什么是 PKI 以及创建 PKI 需要哪些服务。这些 PKI 概念将在下面几个小节中讨论:

证书

证书颁发机构 (CA)

不可更改的 CA 层次结构

注册

证书登记

证书吊销

证书链验证

证书

公钥证书 ,通常简称为 证书 ,用于在 Internet、Extranet 和 Intranet 上进行身份验证并确保数据交换的安全。证书的颁发者和签署者就是众所周知的 证书颁发机构 (CA),将在下一节中介绍。颁发证书的实体是证书的 主体 。

公钥证书是以数字方式签名的声明,它将公钥的值与持有相应私钥的主体(个人、设备和服务)的身份绑定在一起。通过在证书上签名,CA 可以核实与证书上公钥相应的私钥为证书所指定的主体所拥有。

可以为各种目的颁发证书,如 Web 用户身份验证、Web 服务器身份验证、使用安全/多用途 Internet 邮件扩充协议 (Secure/Multipurpose Internet Mail Extensions, S/MIME) 的安全电子邮件、IP 安全性 (IP Security)、安全套接字协议层/事务层安全性 (Secure Sockets Layer/Transaction Layer Security, SSL/TLS) 和代码签名。如果在一个组织内部使用 Windows 2000 企业证书颁发机构(在“Windows 2000 Certificate Services”白皮书中说明),证书可用于登录到 Windows 2000 域。证书还可以由一个 CA 颁发给另一个 CA,以建立证书层次结构。

可以通过多个名称来识别主体,如用户主要名称(用于最终用户证书)、目录名、电子邮件名称和 DNS 域名等。证书还应包含下列信息:

证书的有效期。

证书的序列号,CA 应保证该序列号是唯一的。

CA 的名称以及用于签署该证书的密钥。

CA 所遵循的用来确定证书主体身份的策略的标识符(稍后将详细介绍 CA 策略)。

在证书中标识的密钥对(公钥及相关的私钥)的用法。

证书吊销列表 (CRL) 的位置,这是一个由 CA 维护并发布的列出已被吊销的证书的文档。为确保其完整性,CRL 是用 CA 的私钥签署的。

证书提供了一个在公钥和拥有相应私钥的实体之间建立关系的机制。目前最常用的证书格式通过 ITU-T X.509 版本 3 (X.509v3) 国际标准定义。RFC 2459 是 X.509v3 的一个配置文件,进一步阐明了 X.509v3 中定义的字段。Windows 2000 PKI 采用 X.509v3 标准。Windows 证书是按照 RFC 2459 中的说明编程的,但仍然叫做 X.509v3 证书。(有关 ITU-T X.509 的详细信息,请参见“Windows 2000 证书服务”白皮书。)

ITU-T X.509 并非证书的唯一格式。例如,Pretty Good Privacy (PGP) 安全电子邮件依赖 PGP 所独有的一种证书。

证书颁发机构

证书颁发机构 (CA) 是一个向个人、计算机或任何其它申请实体颁发证书的可信实体。CA 受理证书申请,根据该 CA 的策略验证申请人的信息,然后使用它的私钥把其数字签名应用于证书。然后,CA 将该证书颁发给该证书的主体,作为 PKI 内部的安全凭据。由于不同的 CA 使用不同的方法验证公钥与主体之间的绑定,在选择信任该颁发机构之前,理解该 CA 的策略是非常重要的(稍后解释)。

CA 可以是远程的第三方机构,如 GeoTrust。作为选择,也可以是您创建的供您所在组织使用的 CA,例如,通过安装 Windows 2000 证书服务即可创建一个 CA。每个 CA 对证书申请人可能有完全不同的身份凭据要求,如 Windows 2000 域帐户、职员标记、驾驶执照、公证请求或实际住址。

CA 策略

CA 根据也已确立的一套标准向申请人颁发证书。CA 在受理证书请求(以及颁发证书、吊销证书和发布 CRL)时所采用的一套标准被称为 CA 策略 。通常,CA 以一种叫做证书惯例声明 (Certification Practice Statement, CPS) 的文档发布其策略。

不应将 CA 策略与 Windows 2000 的术语“组策略”相混淆,后者通常与域帐户和应用程序部署服务(如 IntelliMirror)相关联。(关于 Windows 2000 中的 CA 策略以及组策略在 Windows 2000 PKI 中所扮演的角色的信息,请分别参见“Windows 2000 证书服务”白皮书中“Windows 2000 CA 策略”和“CA 证书分发”部分。)

证书颁发机构的类型

CA 的类型 5 包括以下三种:

自签名 CA 。 在自签名 CA 中,证书中的公钥和用于验证证书的密钥是相同的。一些自签名 CA 是根 CA(参见第三项)。

从属 CA 。 在从属 CA 中,证书中的公钥和用于核实证书的密钥是不同的。一个 CA 向另一个 CA 颁发证书的过程叫做 交叉认证 。

根 CA 。 根 CA 是一种特殊的 CA,它受到客户无条件地信任,位于证书层次结构的最高层。所有证书链均终止于根 CA。根颁发机构必须对它自己的证书签名,因为在证书层次结构中再也没有更高的认证机构了。

所有自签名 CA 都是根 CA,因为到自签名 CA 时证书链就终止了。

Windows 2000 只能指定一个自签名 CA 为根 CA。将一个 CA 指定为根 CA 的决策由个人在企业级或本地做出。

不可更改的 CA 层次结构

管理员可以创建 CA 的层次结构,从根 CA 证书开始,然后添加中级 CA,每一个 CA 都可以为其从属 CA 颁发证书。当 CA 向最终实体(用户)颁发证书时,证书链就终止了。

根 CA 证书的分发费用最高,因为如果您开始改变根证书,就必须重建整个 PKI。如果根证书改变了,就必须吊销组织内所有客户端的旧的根证书,并添加新的根证书。另外,必须重新颁发由根 CA 颁发的、再由从属 CA 颁发给最终实体的所有证书。因此,在部署 CA 层次结构时,使用少量的长寿命根 CA 可提供最经济的解决方案。根 CA 非常重要-因为它们被无条件地信任,因为它们是证书链的顶点-因此,在分发证书时要有一个圈外的身份验证。也就是说,由于根 CA 是自签名的,所以必须有人来证明根证书是真品。

因为最终实体要比 CA 多得多,所以向最终实体颁发证书的 CA 使用私钥在大量的数据上签名。用来对数据签名的密钥使用得越频繁,加密数据受到攻击的可能性就越大。因此,为了保持安全,向最终实体颁发证书的联机 CA 必须经常更换其签名密钥。

向最终实体颁发证书的 CA 具有的吊销证书列表,要比中级或根 CA 的列表大得多(这些 CA 仅向其它 CA,更多的是从属 CA 颁发证书)。其部分原因是因为最终实体要比 CA 证书多得多。另外,有许多理由可以解释为什么必须吊销最终实体的证书,如职员改变了工作或离开了公司。

CA 发布吊销证书列表(CRL),其中列出了不应再使用的证书。被吊销证书的有关条目将一直保留在 CRL 列表中,直至证书的 有效期 结束之后,CA 才可将该证书从列表中删除。CRL 中的条目越多,CRL 就越大,其下载时间就越长。通常,只有使用较慢的网络链路(如拨号连接)的用户才会遇到下载时间问题。CA 还可以管理 CRL 列表的大小。一种方法是维护多个列表,称为分区 CRL。另一种方法是,缩短已颁发证书的有效期,从而加快 CA 从列表中删除吊销证书的速度。(关于 CRL 的详细信息,请参见“证书吊销”一节。)

许多应用程序必须能够查明证书最近的吊销状态信息。只有一个联机 CA 能够发布有关证书状态的当前信息。由脱机 CA 公布的吊销状态,必须使用圈外的方法发布到联机位置。

大多数容易受到攻击的 CA 都是处于联机状态的、物理安全措施较差并签署了大量证书的 CA。因此,建立根 CA 和从属 CA 时,应该平衡一下安全性和可用性。通常,建议采用三级层次结构,即一个脱机的独立根 CA、一个脱机的独立从属策略 CA 和一个联机从属颁发企业 CA。

脱机根 CA 。 在设计 CA 的层次结构时,根 CA 的安全级别应设为最高。根 CA 应以脱机状态保存在安全的位置,并且用它只签署少量证书。可能的话,应该将 CA 和密钥保存在专门的保管库中,并且至少同时有两位操作员进入该保管库,一位执行规定的操作,另一位审核其操作。(在 Windows 2000 网络中,设计了独立的 CA,以便它们脱机运行。)

脱机中级 CA 。 在一个根 CA 下面可以有一个或多个从属 CA。将中级从属 CA 设为脱机的机器,可以提高该 CA 的安全性。

联机颁发 CA 。 CA 链中最后一级的 CA 必须处于联机状态,因此可用于受理来自众多客户机的证书申请。根 CA 下面的联机 CA 也可以经常发布最新的吊销状态信息。管理员可以频繁地更改这种 CA 的密钥,因为颁发新证书的开销(管理方面的开销)是最低的。从属 CA 并不完全是可任意使用的,但通过攻击从属 CA 并不能得到多少有价值的东西,而且高级 CA 通过吊销证书即可轻而易举地阻挡这种攻击。

注册

注册 就是主体向 CA 自我介绍的过程。在申请证书时,注册可以是隐含的,或通过为主体提供担保的另一个可信实体(如智能卡登记站)来完成,或者在收到来源可信(如来自域管理员)的信息时自动完成。一旦向 CA 进行了注册,只要符合按照 CA 策略建立的标准,证书即被颁发给该主体。

证书登记

证书登记 就是最终实体进行证书申请并从 CA 接收证书的过程。证书申请就是向 CA 提供身份信息,该信息随后将成为所颁发证书的一部分。CA 根据一套标准受理申请,该标准可能要求进行脱机的、非自动的身份验证(圈外的身份验证)。如果申请被成功受理,CA 随后将向该用户颁发证书。

Windows 2000 PKI 支持向 Microsoft 企业 CA 和 Microsoft 独立 CA 或第三方 CA(如 GeoTrust)进行证书登记。Windows 2000 证书登记支持是以一种独立于传输的方式实现的,并以使用工业标准公钥加密标准 PKCS-10 的证书申请邮件和包含产生的证书或证书链的 PKCS-7 响应为基础。(Windows 使用 PKCS-7 中包含的 PKCS-10 进行更新。这使 Windows 可以用现有的证书对申请进行数字签名。)目前,Windows 2000 对支持 RSA 和 DSA 密钥与签名的证书提供支持。(有关 PKCS 的详细信息,请参见“Windows 2000 证书服务”白皮书。)

通过注册机构进行证书登记

一种特殊的证书登记可通过注册机构 (Registration Authority, RA) 来完成,RA 可为 CA 提供担保,以便将公钥与预期的证书持有人的身份及属性绑定在一起。RA 是拥有特殊证书的主体。这种特殊的证书包含有可以向 CA 表明主体身份的信息。通常,RA 在公钥和主体之间建立绑定,然后在主体生成的申请上签名,以便向 CA 提供该 RA 即将为绑定担保的证据。本质上,使用 RA 是管理委派的一种形式-CA 委派 RA 执行验证公钥和实体之间绑定的任务。

RA 生成在主体和公钥之间建立的牢固绑定的证书。在 Windows 2000 操作系统中,证书服务使用域身份验证来识别申请大多数类型证书的用户身份。创建智能卡登录证书的 Windows 2000 智能卡登记站由 RA 使用。RA 可验证智能卡收件人的身份,同时提供比域身份验证单独完成的主体与公钥之间的绑定更加牢固的绑定。

证书吊销

证书具有一个指定的寿命,但 CA 可通过称为证书吊销的过程来缩短这一寿命。CA 发布一个证书吊销列表 (CRL),列出被认为不能再使用的证书的序列号。CRL 指定的寿命通常比证书指定的寿命短得多。CA 也可以在 CRL 中加入证书被吊销的理由。它还可以加入被认为这种状态改变所适用的起始日期。

可将下列情况指定为吊销证书的理由:

泄露密钥

泄露 CA

从属关系改变

被取代

业务终止

证书持有(这是唯一让您能够改变被吊销证书状态的理由码,在证书状态有问题的情况下非常有用)

由 CA 吊销证书意味着,CA 在证书正常到期之前撤销其允许使用该密钥对的有关声明。在吊销的证书到期之后,CRL 中的有关条目被删除,以缩短 CRL 列表的大小。

在验证签名期间,应用程序可以检查 CRL,以确定给定证书和密钥对是否仍然可信(有些应用程序使用 CryptoAPI 中的 Microsoft 证书链验证 API 来完成此任务)。如果不可信,应用程序可以判断吊销的理由或日期对使用有疑问证书是否有影响。如果该证书被用来验证签名,且签名的日期早于 CA 吊销该证书的日期,那么该签名仍被认为是有效的。

应用程序获得 CRL 之后,由客户机缓存 CRL ,在它到期之前客户机将一直使用它。如果 CA 发布了新的 CRL,拥有有效 CRL 的应用程序并 不 使用新的 CRL,直到应用程序拥有的 CRL 到期为止。

证书链确认

Microsoft CryptoAPI 提供了一个标准的框架,应用程序可用此框架来获得加密服务和数字证书服务。除了 CryptoAPI 为 Windows 95、Windows 98、Windows NT 和 Windows 2000 提供的标准服务以外,第三方供应商可开发并销售他们自己的插件模块,提供附加的加密服务。

在 Windows 网络中,为新证书生成一个请求时,该请求中的信息首先被从请求程序传递给 CryptoAPI。然后,CryptoAPI 把相应的数据传递给一个称为加密服务提供程序 (CSP) 的程序,该程序安装在您的计算机上,或安装在您的计算机可以访问的某种设备(如智能卡)上。CSP 是一个执行诸如机密密钥交换、数据的数字签名以及公钥身份验证之类的加密操作的独立软件模块。任何 Windows 2000 服务或应用程序都可以向 CSP 请求加密操作。

Windows 2000 的证书链创建机制试图建立一个证书路径(证书链),下起最终实体证书(如用户证书),上至 CA 根证书:

证书链机制搜索证书(如果有的话)中的颁发机构密钥标识符 (AKI) 字段,以便在某个系统证书存储器中找到父(颁发者)证书。如果 AKI 中包含 Issuer 和 SerialNumber 字段的值,证书链机制将在系统证书存储器中查找特定的父证书;否则,它将使用密钥标识符的值来查找匹配的父证书。如果证书中没有 Issuer、Serial Number 和 Key Identifier 字段的值,那么证书链机制将使用 IssuerName 字段来查找匹配的父证书。

如果证书链机制根据上述字段未在系统存储器中找到匹配的父证书,它将搜索证书中的颁发机构信息访问 (Authority Information Access, AIA) 字段。它使用该字段中的信息(如果有的话)从指定位置 (如超文本传输协议 (HTTP) 6 http://www.microsoft.com .位置或轻型目录访问协议 (LDAP) 7 位置)检索父证书。

这一过程将针对用户最终实体证书的每一个父证书重复进行,直到在本地的可信根存储器中找到一个自签名证书为止。自签名证书是这样一种证书:它的主体名称和颁发者名称相同,它的公钥可用来验证与该证书相关的签名。

小结

加密通过提供数据加密和其他用户的身份验证的功能来达到保护用户之目的。这种技术允许电子邮件的收件人验证发件人,确保只有预期的收件人能够阅读邮件,并向收件人保证邮件在传输过程中没有被改变。本白皮书介绍了对称密钥加密、公钥加密、散列算法、数字签名和密钥交换的加密概念。

公钥基本结构 (PKI) 包含用于管理证书、公钥和私钥的技术和标准,以验证电子交易所涉及的各方身份。本白皮书解释了证书、证书颁发机构、不可更改的 CA 层次结构、注册、证书登记、证书吊销和证书链验证的 PKI 概念。

理解加密和 PKI 将有助于您理解 Windows 2000 Server 操作系统提供的证书服务功能如何在一个安全的环境中进行电子商务。

其它信息

加密服务提供程序(CSP)是一个独立的软件模块,用于执行各种加密操作,如机密密钥交换、数据的数字签名以及公钥身份验证。

Microsoft Enhanced Cryptographic Provider 除了具有与 Microsoft Base Cryptographic Provider 相同的功能以外,还通过支持更长的密钥长度与附加的加密算法,提供更可靠的安全性。由于放宽了导出限制,这个版本的 CSP 不再像以前的版本那样重要。

数字签名安全标准 (Digital Signature Security Standard, DSS) 是一个把 DSA 用于签名算法、SHA-1 用作邮件散列算法的标准。

Microsoft 为 Windows 95、Windows 98、Windows NT 和 Windows 2000 提供了一个特殊的名为 CryptoAPI (有时也称为 CAPI) 的加密应用程序编程接口 (API)。CryptoAPI 提供了一个标准的框架,应用程序可通过它来获得加密和数字签名服务。

不要将这些一般类型的 CA 与 Windows 2000 证书服务专用的企业 CA 和独立 CA 相混淆。安装 Windows 2000 证书服务时,请在两种不同的 CA 策略中选择一种,不同的 CA 策略在处理证书时具有不同的特性。这两种 CA 策略叫做 企业策略 和 独立策略 :使用企业策略的 CA 被称为企业 CA,而是用独立策略的 CA 叫做独立 CA。企业策略和独立策略在如何处理与 Active Directory 的交互、如何处理身份验证以及是否使用 Windows 2000 提供的证书模板等方面是不同的。无论是 Windows 2000 企业 CA,还是 Windows 2000 独立 CA,都可以是自签名 CA(即同时也是根 CA),也可以是从属 CA。

HTTP 是用于在万维网 (World Wide Web) 上传输信息的协议。HTTP 地址采用下列格式:

作为直接在 TCP/IP 上运行的一个目录服务协议,LDAP 是用于添加、修改和删除存储在 Active Directory 中的信息的主要目录访问协议,也是用于查询和检索 Active Directory 中的数据的主要目录访问协议。Active Directory 客户端必须用 LDAP 获取 Active Directory 中的信息或维护 Active Directory 中的信息。Active Directory 使用 LDAP 来实现与其它 LDAP 兼容的客户端应用程序的互操作性。如果有相应的权限,您可使用任何与 LDAP 兼容的客户端应用程序,浏览、查询、添加、修改或删除 Active Directory 中的信息。



1 0