PKI学习系列-基本概念

来源:互联网 发布:javascript的功能 编辑:程序博客网 时间:2024/05/14 08:53
PKI基础概念(一)
介绍一下PKI以及加密解密、SSL、数字认证等一些基本概念。
 
一、PKI:首先看看国际上两大著名证书颁发机构对PKI的定义。
1.     Entrust
The comprehensive system required to provide public-key encryption and digital signature services is known as a public-key infrastructure.
The purpose of a public-key infrastructure is to manage keys and certificates. By managing keys and certificates through a PKI, an organization establishes and maintains a trustworthy networking environment. A PKI enables the use of encryption and digital signature services across a wide variety of applications.
2.     VeriSign
Public Key Infrastructure is the network security architecture of an organization. It includes software, encryption technologies, and services the enable secure transactions on the Internet, intranets, and extranets.
其他一些国外网站的定义:
Public Key Infrastructure (PKI) is a combination of softwareencryptiontechnologies, and services that enables an enterprise to protect the security of its communications and business transactions on networks.
A Public Key Infrastructure (PKI) is a system/method providing a solution for securing eCommerce and network access services. It is comprised of protocolsservices and standards, which support various applications for a public key infrastructure.
PKI is the acronym for Public Key Infrastructure. The technology is called Public Key because, unlike earlier forms of cryptography, it works with a pair of keys(Not only one key). One of the two keys can be used to encrypt information that can only be decrypted with the other key. One key is made public and the other is kept secret. The secret key is usually called the private key. Since anyone can obtain the public key, users can initiate secure communications without having to previously share a secret through some other medium with their correspondent. The Infrastructure is the underlying system needed to issue keys and certificates and to publish the public information.
 
国内的翻译定义:
PKIPublic Key Infrastructure)公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书
 
PKI(Public Key Infrastructure )即"公开密钥体系",是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的核心,也是电子商务的关键和基础技术。
 
PKI(Public Key Infrastructure )是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。用户可利用PKI平台提供的服务进行安全的电子交易,通信和互联网上的各种活动。
 
二、SSL
还是先看一下国际的标准:
1.     VeriSign
The Secure Sockets Layer  protects data transferred over http using encryption enabled by a server’s SSL Certificate. An SSL Certificate contains a public key and a private key. A public key is used to encrypt information and a private key is used to decipher it. When a browser points to a secured domain, an SSLhandshake authenticates the server and the client and establishes an encryption method and a unique session key. They can begin a secure session that guarantees message privacy and message integrity
Short for Secure Sockets Layer, a protocol developed by Netscape for transmitting private documents via the Internet. SSL uses a cryptographic system that uses two keys to encrypt data − a public key known to everyone and a private or secret key known only to the recipient of the message. Both Netscape Navigator and Internet Explorer support SSL, and many Web sites use the protocol to obtain confidential user information, such as credit card numbers.By convention, URLs that require an SSL connection start with https: instead of http:.
The Secure Socket Layer protocol was created by Netscape to ensure secure transactions between web servers and browsers. The protocol uses a third party, a Certificate Authority (CA), to identify one end or both end of the transactions. This is in short how it works.
1.A browser requests a secure page (usually https://).
2.The web server sends its public key with its certificate.
3.The browser checks that the certificate was issued by a trusted party (usually a trusted root CA), that the certificate is still valid and that the certificate is related to the site contacted.
4.The browser then uses the public key, to encrypt a random symmetric(对称) encryption key and sends it to the server with the encrypted URL required as well as other encrypted http data.
5.The web server decrypts the symmetric encryption key using its private key and uses the symmetric key to decrypt the URL and http data.
6.The web server sends back the requested html document and http data encrypted with the symmetric key.
7.The browser decrypts the http data and html document using the symmetric key and displays the information.
 
 
国内的一些定义:
SSL(Secure Sockets Layer)是由Netscape公司开发的一套Internet数据安全协议,当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
 
SSL 的英文全称是 “Secure Sockets Layer” ,中文名为 “ 安全套接层协议层 ” ,它是网景( Netscape )公司提出的基于 WEB 应用的安全协议。 SSL 协议指定了一种在应用程序协议(如 HTTP 、 Telenet 、 NMTP 和 FTP 等)和 TCP/IP 协议之间提供数据安全性分层的机制,它为 TCP/IP 连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。
 
需要澄清的一些容易混淆的内容:
1 SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。 
2 IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。由于本文中没有涉及两者间的细小差别,本文中这两个名字等价。
3 在WAP的环境下,由于手机及手持设备的处理和存储能力有限,wap论坛(www.wapforum.org)在TLS的基础上做了简化,提出了WTLS协议(Wireless Transport Layer Security),以适应无线的特殊环境。
 
SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: 位于TCP之上,HTTP之下。
 
SSL握手协议简介:
1. 用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。
2. 服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。
3. 客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。如果成功,那么继续。
4. 客户端浏览器为本次会话生成pre-master secret,并将其用服务器公钥加密后发送给服务器。
5. 如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。
6. 如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的pre-master secret,并用它通过某些算法生成本次会话的master secret。
7. 客户端与服务器均使用此master secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。
8. 客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。
9. 服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。
10. 本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。
 
示意图如下所示:
 
1 SSL通讯示意图
    SSL通讯示意图如图1所示:
    2 SSL通讯说明
    在该部分,将对图1所示的示意图进行说明。为了说明的方便,在本文中称客户端为B,服务器端为S。
    STEP 1: B——〉S(发起对话,协商传送加密算法)
    你好,S!我想和你进行安全对话,我的对称加密算法有DES,RC5,我的密钥交换算法有RSA和DH,摘要算法有MD5和SHA。
    STEP2: S——〉B(发送服务器数字证书)
    你好,B!那我们就使用DES-RSA-SHA这对组合进行通讯,为了证明我确实是S,现在发送我的数字证书给你,你可以验证我的身份。
    STEP 3: B——〉S(传送本次对话的密钥)
    (检查S的数字证书是否正确,通过CA机构颁发的证书验证了S证书的真实有效性后。生成了利用S的公钥加密的本次对话的密钥发送给S)
    S, 我已经确认了你的身份,现在将我们本次通讯中使用的对称加密算法的密钥发送给你。
    STEP4: S——〉B(获取密钥)
    (S用自己的私钥解密获取本次通讯的密钥)。
    B, 我已经获取了密钥。我们可以开始通信了。
    STEP5: S<——>B(进行通讯)
    说明:一般情况下,当B是保密信息的传递者时,B不需要数字证书验证自己身份的真实性,如电子银行的应用,客户需要将自己的账号和密码发送给银行,因此银行的服务器需要安装数字证书来表明自己身份的有效性。在某些B2B应用,服务器端也需要对客户端的身份进行验证,这时客户端也需要安装数字证书以保证通讯时服务器可以辨别出客户端的身份,验证过程类似于服务器身份的验证过程。
    此外需要说明的是,在一些电子商务的应用中,可能还会使用到电子签名,或者为了信息交换的更加安全,会增加电子签名和消息校验码(MAC)。
 
为了便于了解SSL,下面在简要介绍一下信息加密相关知识。使用密钥类型加密信息的加密算法可以分为以下几类:HASH 编码、对称加密和非对称加密三类。
    HASH 编码是使用HASH算法从任意长度的消息中计算HASH值的一个过程,HASH值可以说是消息的指纹,因为对于任何不同的消息,几乎总有不同的HASH值。因此在SSL通讯过程中,可以对消息的HASH值进行加密,确保传递的消息在传输过程中没有被修改。
    非对称加密或称之为公钥加密使用数学上相关的两个数值来对信息进行编码(加密),其中一个数字称为公钥,另一个称为私钥。公钥加密的信息可以用私钥解密,私钥加密的信息可以用公钥解密。由于公钥可以大面积发放,因此公钥加密在SSL加密通信中应用于对密钥的加密或者进行数字签名。
    对称加密和非对称加密相比的区别在于对称加密中,加密信息和解密信息使用同样的密钥,因此该密钥无法公开。但是其具有加密、解密快速的特点。
    在SSL通讯中,首先采用非对称加密交换信息,使得服务器获得浏览器端提供的对称加密的密钥,然后利用该密钥进行通讯过程中信息的加密和解密。为了保证消息在传递过程中没有被篡改,可以加密HASH编码来确保信息的完整性。
 
 
三、证书(数字证书)
国外的一些定义:
A digital certificate is an electronic "credit card" that establishes your credentials when doing business or other transactions on the Web. It is issued by a certification authority (CA). It contains your name, a serial number, expiration dates, a copy of the certificate holder's public key (used for encrypting messages anddigital signatures), and the digital signature of the certificate-issuing authority so that a recipient can verify that the certificate is real. Some digital certificates conform to a standard, X.509. Digital certificates can be kept in registries so that authenticating users can look up other users' public keys.
 
An SSL certificate, or secure certificate, is a file installed on a secure Web server that identifies a website. This digital certificate establishes the identity and authenticity of the company or merchant so that online shoppers can trust that the website is secure and reliable. In order to verify that these sites are legitimate (they are who they say they are), the companies and their websites are verified by a third party, such as Verisign or Thawte.
 
An attachment to an electronic message used for security purposes. The most common use of a digital certificate is to verify that a user sending a message is who he or she claims to be, and to provide the receiver with the means to encode a reply.
An individual wishing to send an encrypted message applies for a digital certificate from a Certificate Authority (CA). The CA issues an encrypted digital certificate containing the applicant's public key and a variety of other identification information. The CA makes its own public key readily available through print publicity or perhaps on the Internet.
The recipient of an encrypted message uses the CA's public key to decode the digital certificate attached to the message, verifies it as issued by the CA and then obtains the sender's public key and identification information held within the certificate. With this information, the recipient can send an encrypted reply.
国内的一些定义说明:
数字证书就是标志网络用户身份信息的一系列数据,用来在网络通讯中识别通讯各方的身份,即要在Internet上解决"我是谁"的问题,就如同现实中我们每一个人都要拥有一张证明个人身份的身份证或驾驶执照一样,以表明我们的身份或某种资格。
  
数字证书是由权威公正的第三方机构即CA中心签发的,以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性完整性,以及交易实体身份的真实性签名信息的不可否认性,从而保障网络应用的安全性。
  
数字证书采用公钥密码体制,即利用一对互相匹配的密钥进行加密、解密。每个用户拥有一把仅为本人所掌握的私有密钥(私钥),用它进行解密和签名;同时拥有一把公共密钥(公钥)并可以对外公开,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样,信息就可以安全无误地到达目的地了,即使被第三方截获,由于没有相应的私钥,也无法进行解密。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。在公开密钥密码体制中,常用的一种是RSA体制。
  
用户也可以采用自己的私钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。采用数字签名,能够确认以下两点:
  
1)保证信息是由签名者自己签名发送的,签名者不能否认或难以否认;
  
2)保证信息自签发后到收到为止未曾作过任何修改,签发的文件是真实文件。
  
数字证书可用于:发送安全电子邮件、访问安全站点、网上证券、网上招标采购、网上签约、网上办公、网上缴费、网上税务等网上安全电子事务处理和安全电子交易活动。
  
数字证书的格式一般采用X.509国际标准。目前,数字证书主要分为安全电子邮件证书、个人和企业身份证书、服务器证书以及代码签名证书等几种类型证书。
 
 
数字证书就是网络通讯中标志通讯各方身份信息的一系列数据,其作用类似于现实生活中的身份证。它是由一个权威机构发行的,人们可以在交往中用它来识别对方的身份。
最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息,证书的格式遵循ITUT X.509国际标准。
一个标准的X.509数字证书包含以下一些内容:
    证书的版本信息
    证书的序列号,每个证书都有一个唯一的证书序列号
    证书所使用的签名算法
    证书的发行机构名称,命名规则一般采用X.500格式
    证书的有效期,现在通用的证书一般采用UTC时间格式,它的计时范围为1950-2049
    证书所有人的名称,命名规则一般采用X.500格式
    证书所有人的公开密钥
    证书发行者对证书的签名
以及一些证书扩展项。
使用数字证书,通过运用对称和非对称密码体制等密码技术建立起一套严密的身份认证系统,从而保证:信息除发送方和接收方外不被其它人窃取;信息在传输过程中不被篡改;发送方能够通过数字证书来确认接收方的身份;发送方对于自己的信息不能抵赖。
 
四、CA
国外对其解释:
 
Entrust:
For public-key cryptography to be valuable, users must be assured that the other parties with whom they communicate are "safe"?that is, their identities and keys are valid and trustworthy. To provide this assurance, all users of a PKI must have a registered identity. These identities are stored in a digital format known as a public key certificate. Certification Authorities (CAs) represent the people, processes, and tools to create digital certificates that securely bind the names of users to their public keys.
In creating certificates, CAs act as agents of trust in a PKI. As long as users trust a CA and its business policies for issuing and managing certificates, they can trust certificates issued by the CA. This is known asthird-party trust.
CAs create certificates for users by digitally signing a set of data that includes the following information (and additional items):
    1. the user’s name in the format of a distinguished name (DN). The DN specifies the user’s name and any additional attributes required to uniquely identify the user (for example, the DN could contain the user’s employee number).
    2. a public key of the user. The public key is required so that others can encrypt for the user or verify the user’s digital signature.
    3. the validity period (or lifetime) of the certificate (a start date and an end date).
    4. the specific operations for which the public key is to be used (whether for encrypting data, verifying digital signatures, or both).
The CA’s signature on a certificate allows any tampering with the contents of the certificate to be easily detected. (The CA’s signature on a certificate is like a tamper-detection seal on a bottle of pills?any tampering with the contents of a certificate is easily detected) As long as the CA?s signature on a certificate can be verified, the certificate has integrity. Since the integrity of a certificate can be determined by verifying the CA’s signature, certificates are inherently secure and can be distributed in a completely public manner (for example, through publicly-accessible directory systems).
Users retrieving a public key from a certificate can be assured that the public key is valid. That is, users can trust that the certificate and its associated public key belong to the entity specified by the distinguished name. Users also trust that the public key is still within its defined validity period. In addition, users are assured that the public key may be used safely in the manner for which it was certified by the CA.
 
Openssl:
How do you know that you are dealing with the right person or rather the right web site. Well, someone has taken great length (if they are serious) to ensure that the web site owners are who they claim to be. This someone, you have to implicitly trust: you have his/her certificate loaded in your browser (a root Certificate). A certificate, contains information about the owner of the certificate, like e-mail address, owner's name, certificate usage, duration of validity, resource location or Distinguished Name (DN) which includes the Common Name (CN) (web site address or e-mail address depending of the usage) and the certificate ID of the person who certifies (signs) this information. It contains also the public key and finally a hash to ensure that the certificate has not been tampered with. As you made the choice to trust the person who signs this certificate, therefore you also trust this certificate. This is a certificate trust tree or certificate path. Usually your browser or application has already loaded the root certificate of well known Certification Authorities (CA) or root CA Certificates. The CA maintains a list of all signed certificates as well as a list of revoked certificates. A certificate is insecure until it is signed, as only a signed certificate cannot be modified. You can sign a certificate using itself, it is called a self signed certificate. All root CA certificates are self signed.
 
VeriSign:
When VeriSign issues an SSL Certificate, we act as a Certificate Authority (CA). VeriSign digitally signs each certificate we issue. Each browser contains a list of CAs to be trusted. When the SSL handshake occurs, the browser verifies that the server certificate was issued by a trusted CA. If the CA is not trusted, a warning will appear. When high-security browsers recognize an Extended Validation SSL Certificate, they display the name of the CA next to the browser bar. VeriSign is one of the most trusted CAs on the Internet.
 
国内的解释:
所谓CACertificate Authority)认证中心,它是采用PKIPublic Key Infrastructure)公开密钥基础架构技术,专门提供网络身份认证服务,负责签发和管理数字证书,且具有权威性和公正性的第三方信任机构,它的作用就像我们现实生活中颁发证件的公司,如护照办理机构。
 
CA是认证中心的英文Certification Authority的缩写。 CA中心,又称为数字证书认证中心。CA中心作为电子交易中受信任的第三方,负责为电子商务环境中各个实体颁发数字证书,以证明各实体身份的真实性,并负责在交易中检验和管理证书;数字证书的用户拥有自己的公钥/私钥对。证书中包含有证书主体的身份信息、其公钥数据、发证机构名称等,发证机构验证证书主体为合法注册实体后,就对上述信息进行数字签名,形成证书。 在公钥证书体系中,如果某公钥用户需要任何其它已向CA注册的用户的公钥,可直接向该用户索取证书,而后用CA的公钥解密解密即可得到认证的公钥;由于证书中已有CA的签名来实现认证,攻击者不具有CA的签名密钥,很难伪造出合法的证书,从而实现了公钥的认证性。 数字证书认证中心是整个网上电子交易安全的关键环节,是电子交易中信赖的基础。他必须是所有合法注册用户所信赖的具有权威性、信赖性及公正性的第三方机构。
CA的核心功能就是发放和管理数字证书。概括地说,CA认证中心的功能主要有:证书发放、证书更新、证书撤销和证书验证。具体描述如下:
(1)接收验证用户数字证书的申请。
(2)确定是否接受用户数字证书的申请,即证书的审批。
(3)向申请者颁发(或拒绝颁发)数字证书。
(4)接收、处理用户的数字证书更新请求。
(5)接收用户数字证书的查询、撤销。
(6)产生和发布证书的有效期。
(7)数字证书的归档。
(8)密钥归档。
(9)历史数据归档。
 
数字证书认证中心(Certficate Authority,CA)是整个网上电子交易安全的关键环节。它主要负责产生、分配并管理所有参与网上交易的实体所需的身份认证数字证书。每一份数字证书都与上一级的数字签名证书相关联,最终通过安全链追溯到一个已知的并被广泛认为是安全、权威、足以信赖的机构-根认证中心(根CA)。
 
CA (Certificate Authority) 认证中心:负责产生,分配并且管理数字证书的可信赖的第三方权威机构。采用分级机构,上级认证中心负责签发和管理下级认证中心的证书,最下一级直接面向最终用户
 
五、联系证书与CA
证书就是数字化的文件,里面有一个实体(网站,个人等)的公共密钥和其他的属性,如名称等。该公共密钥只属于某一个特定的实体,它的作用是防止一个实体假装成另外一个实体。
证书用来保证不对称加密算法的合理性。想想吧,如果没有证书记录,那么假设某俩人A与B的通话过程如下: 
这里假设A的publickey是K1,privatekey是K2,B的publickey是K3,privatekey是K4 
xxxxxx(kn)表示用kn加密过的一段文字xxxxxx 
A---àhello(plaintext)---------à
A<----hello(plaintext)<----------B 
A<----B’s publickey<------------B 
A--àA’s publickey(K1)------à
...... 
如果C想假装成B,那么步骤就和上面一样。
A---àhello(plaintext)---------àC
A<----hello(plaintext)<----------C
注意下一步,因为A没有怀疑C的身份,所以他理所当然的接受了C的publickey,并且使用这个key来继续下面的通信。 
A<----C’s publickey<------------C 
A---àA’s publickey(K1)-----à
...... 
这样的情况下A是没有办法发觉C是假的。如果A在通话过程中要求取得B的证书,并且验证证书里面记录的名字,如果名字和B的名字不符合,就可以发现对方不是B。验证B的名字通过再从证书里面提取B的公用密钥,继续通信过程。
那么,如果证书是假的怎么办?或者证书被修改过了怎么办?慢慢看下来吧。 
证书最简单的形式就是只包含有证书拥有者的名字和公用密钥。当然现在用的证书没这么简单,里面至少还有证书过期的deadline,颁发证书的机构名称,证书系列号,和一些其他可选的信息。最重要的是,它包含了证书颁发机构(certificationauthority简称CA)的签名信息。 
我们现在常用的证书是采用X.509结构的,这是一个国际标准证书结构。任何遵循该标准的应用程序都可以读、写X509结构的证书。 
通过检查证书里面的CA的名字,和CA的签名,就知道这个证书的确是由该CA签发的然后,你就可以简单证书里面的接收证书者的名字,然后提取公共密钥。这样做建立的基础是,你信任该CA,认为该CA没有颁发错误的证书。 
CA是第三方机构,被你信任,由它保证证书的确发给了应该得到该证书的人。CA自己有一个庞大的publickey数据库,用来颁发给不同的实体。 
这里有必要解释一下,CA也是一个实体,它也有自己的公共密钥和私有密钥,否则怎么做数字签名?它也有自己的证书,你可以去它的站点down它的证书得到它的公共密钥。
一般CA的证书都内嵌在应用程序中间。不信你打开你的IE,在internet选项里面选中"内容",点击"证书",看看那个"中间证书发行机构"和"委托根目录发行机构",是不是有一大堆CA的名称?也有时CA的证书放在安全的数据库里面。
当你接受到对方的证书的时候,你首先会去看该证书的CA,然后去查找自己的CA证书数据库,看看是否找的到,找不到就表示自己不信任该CA,那么就告吹本次连接。找到了的话就用该CA的证书里面的公用密钥去检查CA在证书上的签名。
这里又有个连环的问题,我怎么知道那个CA的证书是属于那个CA的?人家不能造假吗? 
解释一下吧。CA也是分级别的。最高级别的CARootCAs,其他cheap一点的CA的证书由他们来颁发和签名。这样的话,最后的保证就是:我们信任RootCAs.那些有RootCAs签名过的证书的CA就可以来颁发证书给实体或者其他CA了。你不信任RootCAs?人民币由中国人民银行发行,运到各个大银行,再运到地方银行,你从地方银行取人民币的时候不信任发行它的中国人民银行吗?RootCAs都是很权威的机构,没有必要担心他们的信用。那RootCAs谁给签名?他们自己给自己签名,叫自签名。
五、CSR
国外的一些定义:
 
VeriSign:
The CSR is a string of text generated by your server software. You provide this string of text to VeriSign during the enrollment process. To generate a CSR, you will need to know what kind of server software is running on your Web server.
 
Entrust:
A Certificate Signing Request (CSR) is a PKCS10 request which is an unsigned copy of your certificate. Entrust Certificate Services will use the Certificate Signing Request (CSR) to generate your signed digital x509 V3 SSL server certificate. Your CSR contains the following:
  1. Information about your organization (organization name, country, etc...)
  2. Your Web or WAP Server's public key
  3. A unique mathematical match to your server's private key .
 
国内一些定义:
什么是CSR? 
  答:CSR是一个证书签名请求,在您申请证书之前,首先要在您的WEB服务器上生成CSR并将其提交给CA认证中心,CA才能给您签发SSL服务器证书。可以这样认为,CSR就是一个在您的服务器上生成的证书。CSR包括以下内容:
  a) 您的组织信息(组织名称、国家等等)
  b) 您的Web服务器的域名
 
CSR是一个加密文件,它含有你的组织公钥、名称、所在地和URL。要生成CSR,如果您的主机托管或租用在主机服务提供商或IDC中,您可以直接与您的系统管理员联系,让他帮助您生成CSR. 如果您自己管理您的主机,请参考服务器软件的手册或联系服务器厂商以便生成CSR. 生成CSR过程中,服务器生成两个文件:私钥和CSR
注意事项:将你的私钥和CSR复制到软盘上,并将软盘保存在一个安全的地方。如果软盘被丢失或破坏,你将无法使用你的服务器数字证书。
 
CSR是服务器生成的一个文本文件,它包含了一下信息:
确认申请者的信息
申请者的公钥
将安装服务证书的服务器类型
服务器中一般都自带有生成CSR的功能,CSR生成后将以不可阅读的方式显示以保证安全。

CSR是什么样的?
您生成的CSR应该与下面的CSR格式相似:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIByDCCATECAQAwgYgxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhWaXJnaW5pYTEQMA4GA1UEBxMHUm9hbm9rZTEmMCQGA1UEChMdTmV3IENlbnR1cnkgVGVjaG5vbG9naWVzIEluYy4xDzANBgNVBAsTBk5DVGluYzEbMBkGA1UEAxQSd3d3Lm5ld2NlbnRlY2guY29tMIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgFHdQ2up+9Z06F8pVfC9R0oj0A8fX6mLdc66JhUv6QGleJ37lLciLpgvDwvg+Tyi5uThrua+B2zmgMnpr0AkpN2nqIe0inHTR29vcbjUNiMSkaxZHN/NQlSSKwQbCB9d6TJBUeRzGGfULpSF8dhlTfcI4krbEE9TY/r1/kCGmnSBAgMBAAGgADANBgkqhkiG9w0BAQQFAAOBgQAgOn0at410ohHnKEzVgElu0a1w10AL37qxgJIBflnLD+7C0h8UKOUFPyrC2DBwP3kJkzGRFDLJiwshV3yPuGMOaqYcTLB8/DK553TyuLR2FIftr4oxKZ6wT8D8v38a1s1D+1owU20CbzA7Ur0YBqrnQdD2PnTv/XpHtAAr+M4oez==
-----END NEW CERTIFICATE REQUEST-----
六、X509
国外的定义:
A widely used standard for defining digital certificates.  X.509 (Version 1) was first issued in 1988 as a part of the ITU X.500 Directory Services standard. When X.509 was revised in 1993, two more fields were added resulting in the Version 2 format. These two additional fields support directory access control. X.509 Version 3 defines the format for certificate extensions used to store additional information regarding the certificate holder and to define certificate usage. Collectively, the term X.509 refers to the latest published version, unless the version number is stated.
X.509 is published as ITU recommendation ITU-T X.509 (formerly CCITT X.509) and ISO/IEC/ITU 9594-8 which defines a standard certificate format for public key certificates and certification validation. With minor differences in dates and titles, these publications provide identical text in the defining of public-key and attribute certificates.
 
In One Sentence: What is a Certificate?
public-key certificate is a digitally signed statement from one entity, saying that the public key (and some other information) of another entity has some specific value.
Let us expand on some of the key terms used in this sentence:
Public Keys
These are numbers associated with a particular entity, and are intended to be known to everyone who needs to have trusted interactions with that entity. Public keys are used to verify signatures.
Digitally Signed
If some data is digitally signed it has been stored with the "identity" of an entity, and a signature that proves that entity knows about the data. The data is rendered unforgeable by signing with the entitys' private key.
Identity
A known way of addressing an entity. In some systems the identity is the public key, in others it can be anything from a Unix UID to an Email address to an X.509 Distinguished Name.
Signature
A signature is computed over some data using the private key of an entity (the signer).
Private Keys
These are numbers, each of which is supposed to be known only to the particular entity whose private key it is (that is, it's supposed to be kept secret). Private and public keys exist in pairs in all public key cryptography systems (also referred to as "public key crypto systems"). In a typical public key crypto system, such as DSA, a private key corresponds to exactly one public key. Private keys are used to compute signatures.
Entity
An entity is a person, organization, program, computer, business, bank, or something else you are trusting to some degree.
Basically, public key cryptography requires access to users' public keys. In a large-scale networked environment it is impossible to guarantee that prior relationships between communicating entities have been established or that a trusted repository exists with all used public keys. Certificates were invented as a solution to this public key distribution problem. Now a Certification Authority (CA) can act as a Trusted Third Party. CAs are entities (e.g., businesses) that are trusted to sign (issue) certificates for other entities. It is assumed that CAs will only create valid and reliable certificates as they are bound by legal agreements. There are many public Certification Authorities, such as VeriSign, Thawte, Entrust, and so on. You can also run your own Certification Authority using products such as the Netscape/Microsoft Certificate Servers or the Entrust CA product for your organization.
What's Inside an X.509 Certificate?
The X.509 standard defines what information can go into a certificate, and describes how to write it down (the data format). All X.509 certificates have the following data, in addition to the signature:
Version
This identifies which version of the X.509 standard applies to this certificate, which affects what information can be specified in it. Thus far, three versions are defined.
Serial Number
The entity that created the certificate is responsible for assigning it a serial number to distinguish it from other certificates it issues. This information is used in numerous ways, for example when a certificate is revoked its serial number is placed in a Certificate Revocation List (CRL).
Signature Algorithm Identifier
This identifies the algorithm used by the CA to sign the certificate.
Issuer Name
The X.500 name of the entity that signed the certificate. This is normally a CA. Using this certificate implies trusting the entity that signed this certificate. (Note that in some cases, such as root or top-levelCA certificates, the issuer signs its own certificate.)
Validity Period
Each certificate is valid only for a limited amount of time. This period is described by a start date and time and an end date and time, and can be as short as a few seconds or almost as long as a century. The validity period chosen depends on a number of factors, such as the strength of the private key used to sign the certificate or the amount one is willing to pay for a certificate. This is the expected period that entities can rely on the public value, if the associated private key has not been compromised.
Subject Name
The name of the entity whose public key the certificate identifies. This name uses the X.500 standard, so it is intended to be unique across the Internet. This is the Distinguished Name (DN) of the entity, for example,
    CN=Java Duke, OU=Java Software Division, O=Sun Microsystems Inc, C=US
(These refer to the subject's Common Name, Organizational Unit, Organization, and Country.)
Subject Public Key Information
This is the public key of the entity being named, together with an algorithm identifier which specifies which public key crypto system this key belongs to and any associated key parameters.
X.509 Version 1 has been available since 1988, is widely deployed, and is the most generic.
X.509 Version 2 introduced the concept of subject and issuer unique identifiers to handle the possibility of reuse of subject and/or issuer names over time. Most certificate profile documents strongly recommend that names not be reused, and that certificates should not make use of unique identifiers. Version 2 certificates are not widely used.
X.509 Version 3 is the most recent (1996) and supports the notion of extensions, whereby anyone can define an extension and include it in the certificate. Some common extensions in use today are: KeyUsage (limits the use of the keys to particular purposes such as "signing-only") and AlternativeNames (allows other identities to also be associated with this public key, e.g. DNS names, Email addresses, IP addresses). Extensions can be marked critical to indicate that the extension should be checked and enforced/used. For example, if a certificate has the KeyUsage extension marked critical and set to "keyCertSign" then if this certificate is presented during SSL communication, it should be rejected, as the certificate extension indicates that the associated private key should only be used for signing certificates and not for SSL use.
All the data in a certificate is encoded using two related standards called ASN.1/DER. Abstract Syntax Notation 1 describes data. The Definite Encoding Rules describe a single way to store and transfer that data. People have been known to describe this combination simultaneously as "powerful and flexible" and as "cryptic and awkward".
The IETF PKIX working group is in the process of defining standards for the Internet Public Key Infrastructure. We are closely following their work, and are supporting its X.509 Certificate and CRL Profile, which is being specified.
 
X.509标准
  在和CA进行一些接触时,我们常常会听到一个名词: X.509。它是一种行业标准或者行业解决方案,在X.509方案中,默认的加密体制是公钥密码体制。为进行身份认证,X.509标准及公共密钥加密系统提供了数字签名的方案。用户可生成一段信息及其摘要(亦称作信息"指纹")。用户用专用密钥对摘要加密以形成签名,接收者用发送者的公共密钥对签名解密,并将之与收到的信息"指纹"进行比较,以确定其真实性。
  此问题的解决方案即X.509标准与公共密钥证书。本质上,证书由公共密钥加密钥拥有者的用户标识组成,整个字块有可信赖的第三方签名。典型的第三方即大型用户群体(如政府机关或金融机构)所信赖的CA
  此外,X.509标准还提供了一种标准格式CRL,下面我们就来看一看 X509标准下的证书格式极其扩展。
  目前X.509有不同的版本,例如 X.509 V2x.509 v3都是目前比较新的版本,但是都在原有版本(X.509 V1)的基础上进行功能的扩充,其中每一版本必须包含下列信息: 
  (1) 版本号
  (2) 序列号;
  (3) 签名算法标识符
  (4) 认证机构
  (5) 有效期限
  (6) 主题信息
  (7) 认证机构的数字签名
  (8) 公钥信息
1
、版本号:
用来区分X.509的不同版本号
2
、序列号;
CA给予每一个证书的分配唯一的数字型编号,当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中;这也是序列号唯一的原因。
3
、签名算法标识符:
用来指定用CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法,须向国际指明标准组织(如ISO)注册。
4
、认证机构:
即发出该证书的机构唯一的CAx.500名字;
5
、有效期限:
证书有效的时间包括两个日期:证书开始生效期和证书失效的日期和时间。在所指定的这两个时间之间有效;
6
、主题信息:
证书持有人的姓名、服务处所等信息;
7
、认证机构的数字签名:
以确保这个证书在发放之后没有被撰改过;
8
、公钥信息:
包括被证明有效的公钥值和加上使用这个公钥的方法名称;
  X.509的扩展(V3
  X.509标准第三版在V2的基础上进行了扩展,V3引进一种机制。这种机制允许通过标准化和类的方式将证书进行扩展包括额外的信息,从而适应下面的一些要求一: 
  (1)一个证书主体可以有多个证书;
  (2)证书主体可以被多个组织或社团的其他用户识别;
  (3)可按特定的应用名(不是X.500名)识别用户,如将公钥同EMAIL地址联系起来;
  (4)在不同证书政策和实用下会发放不同的证书,这就要求公钥用户要信赖证书;证书并不限于这些标准扩展,任何人都可以向适当的权利机构注册一种扩展。将来会有更多的适于应用的扩展列入标准扩展集中。值得注意的是这种扩展机制应该是完全可以继承的。 
  每一种扩展包括三个域:类型、可否缺省、值
类型字段定义了扩展值字段中的数据类型。这个类型可以是简单的字符串,数值,日期,图片或一个复杂的数据类型。为便于交互,所有的数据类型都应该在国际知名组织进行注册。
  是否可缺省字段是一比特标识位。当一扩展标识为不可缺省时,说明相应的扩展值非常重要,应用程序不能忽略这个信息。如果使用一特殊证书的应用程序不能处理该字段的内容,就应该拒绝此证书。 
扩展值字段包含了这个扩展实际的数据。 
公开密钥证书的标准扩展可以分为以下几组: 
  · 密钥和政策信息,包括机构密钥识别符、主体密钥识别符、密钥用途(如数字签字,不可否认性   、密钥加密、数据加密、密钥协商、证书签字、CRL签字等),密钥使用期限等; 
  · 主体和发证人属性,包括主体代用名、发证者代用名、主体检索属性等; 
  · 证书通路约束,包括基本约束,指明是否可以做证书机构。 
  · CRL有关的补充;
  X.509是国际标准化组织CCITT建议作为X.500目录检索的一部分提供安全目录检索服务。一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息一种非常通用的证书格式,所有的证书都符合X.509 国际标准。目前X.509有不同的版本,例如 X.509 V2x.509 v3都是目前比较新的版本,但是都在原有版本基础上进行功能的扩充,其中每一版本必须包含下列信息:
  (1) 用来区分X.509的不同版本号既版本号
  (2) CA给予每一个证书的分配的编号即序列号;
  (3) 用于产生证书所用的方法以及一切参数即签名算法
  (4) CAx.500名字即发出该证书的认证机构
  (5) 证书有效的时间包括两个日期,在所指定的两个时间之间有效即有效期限
  (6) 证书持有人的姓名、服务处所等信息即主题信息
  (7) 认证机构的数字签名
  (8) 被证明的公钥值,加上使用这个公钥的方法名称即公钥信息
  n PKI (Public-Key Infrastructure) 公钥体系基础框架。
  n PKIX (Public-Key Infrastructure Using X.509)使用X.509的公钥体系基础框架。
  n X.500 ISOITU提出的用于为大型网络提供目录服务的标准体系。
  n X.509 X.500提供验证(Authenticating)体系的标准。
  n PKCSPublic Key Cryptography Standards)公钥加密标准,为PKI提供一套完善的标准体系。 
  对于任何基于公钥体系的安全应用,必须确立其PKI。而电子签证机关(CA)PKI中的一个关键的组成部分,它主要涉及两方面的内容,即公钥证书的发放和公钥证书的有效性证明。在PKIX中,CA遵循  X.509标准规范。
  n X.509最早的版本X.509v1是在1988年提出的,到现在已升级到X.509v3,现将其涉及到的主要内容以及与前版本的比较列于下表。
  X.509 PKI国际标准更新版本对照表
  X.509 PKI 主要特性
  X.509 v1 & 2 X.509 v3
证书信息只有X.500 实体名,包括CA、证主(subject)名,证主公钥及其有效期。充分扩展,可包含任何信息。
  CA 规范 CA体系鼓励带交叉的层状树型结构,无信任限制规范。 CA体系鼓励带交叉的层状树型结构,有信任限制规范。
  CA "证主 " 用户 CA、证主、用户在概念上严格区分
  CA "证主用户信任关系认为每个用户至少信任一个CACA无法操纵与其它CA、证主及用户间的信任关系。认为每个用户至少信任一个CACA可以规范与其它CA及证主间的信任关系。
证书有效性验证方式离线方式,通过检查证书有效期及是否出现在最近的CRL(证书吊销表)上。支持离线与在线方式。
  证书吊销方法简单CRL复杂的CRL,通过功能扩展支持在线方式。
证书形式特点身份形式的证书。主要还是身份形式的证书,但支持信任委托形式的证书。 
匿名性匿名程度依赖于 X.500 条目的匿名程度。扩展功能支持彻底的匿名服务。
  X.509证书格式 
  X.509是另一种非常通用的证书格式。所有的证书都符合ITU-T X.509国际标准;因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。但实际上,不同的公司对X.509证书进行了不同的扩展,不是所有的证书都彼此兼容。在一份证书中,必须证明公钥及其所有者的姓名是一致的。对PGP证书来说,任何人都可以扮演认证者的角色。对X.509证书来说,认证者总是 CA或由CA指定的人(其实PGP证书也完全支持使用CA来确认证书的体系结构),一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式),所有的X.509证书包含以下数据:
  <>X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。目前的版本是3 
  <>证书持有人的公钥:包括证书持有人的公钥,算法(指明密钥属于哪种密码系统)的标示符和其他相关的密钥参数。
  <>证书的序列号:创建证书的实体(组织或个人)有责任为该证书指定一个独一无二的序列号,以区别于该实体发布的其他证书。序列号信息有许多用途;比如当一份证书被回收以后,它的序列号就被放入证书回收列表(CRL)之中。
  <>证书持有人唯一的标示符:(或称DN-distinguished name)这个名字在 Internet上应该是唯一的。DN由许多部分组成,看起来象这样: 
  CN=Bob Allen, OU=Total Network Security Division, 
  O=Network Associates, Inc., C=US 
这些信息指出该科目的通用名,组织单位,组织和国家 
  <>证书的有效期:证书起始日期和时间以及终止日期和时间;指明证书何时失效。 
  <>证书发布者的唯一名字:这是签发该证书的实体的唯一名字。通常是CA.使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书
  <>发布者的数字签名:这是使用发布者私钥生成的签名。 
  <>签名算法的标示符:指明CA签署证书所使用的算法。 
  X.509证书和PGP证书之间有许多不同,最明显的如下所述: 
  <>用户可以创建自己的PGP证书,但是必须向CA请求才能得到一份X.509证书。 
  <>X.509证书天生只支持密钥拥有者的一个名字。
  <>X.509证书只支持证明密钥合法性的一个数字签名。
要获得一份X.509证书,必须请求CA发给你证书。用户提供自己的公钥,证明自己拥有相应的私钥,并提供有关自己的某些特定信息。然后在这些信息上数字签名,并将整个数据包(称为证书请求)发给CACA做一些努力来验证用户提供的信息是正确的,然后就生成证书并返回给用户。 
一份X.509证书看起来很象一份带公钥的标准书面证书(类似于基础急救班的结业证书)。证书中包含名字和一些有关的个人信息,加上颁发证书人的签名。
当前X.509证书最广泛的使用大概是在Web浏览器之中。
 
七、CRL
国外的定义:
RFC3280:
CRL issuers issue CRLs. In general, the CRL issuer is the CA. CAs
publish CRLs to provide status information about the certificates
they issued. However, a CA may delegate this responsibility to
another trusted authority. Whenever the CRL issuer is not the CA
that issued the certificates, the CRL is referred to as an indirect
CRL.

Each CRL has a particular scope. The CRL scope is the set of
certificates that could appear on a given CRL. For example, the
scope could be "all certificates issued by CA X", "all CA
certificates issued by CA X", "all certificates issued by CA X that
have been revoked for reasons of key compromise and CA compromise",
or could be a set of certificates based on arbitrary local
information, such as "all certificates issued to the NIST employees
located in Boulder".

A complete CRL lists all unexpired certificates, within its scope,
that have been revoked for one of the revocation reasons covered by
the CRL scope. The CRL issuer MAY also generate delta CRLs. A delta
CRL only lists those certificates, within its scope, whose revocation
status has changed since the issuance of a referenced complete CRL.
The referenced complete CRL is referred to as a base CRL. The scope
of a delta CRL MUST be the same as the base CRL that it references.

 
一般情况下在CA的根证书中会包含CRL分发点,以便用户去查看哪些证书被废弃。
可以根据提供的URL去站点下载CRL文件:
CRL中包含如下信息:
版本,发行者,生效日期以及下一次更新日期和签名算法,以及实效证书序列号列表:
 
有些网站直接提供了在线的CRL验证。
 
CRL是使用公共密钥基础架构维持连接网络服务权限的两种方法之一.另一种更新的方法是在线证书状态协议(OCSP),已经在某些场合下取代了CRL.CRL顾名思义:一张持证人与其数字认证状态相对应的列表.CRL显示了所有在原定失效日期到达之前被废除的数字证书,废除后的数字证书不能使用。CRL也包含下次证书发放日期.潜在用户能否接入服务器,取决于该用户在CRL状态
 

PKI简介

          本笔记的主要参考是RFC2459,RFC3279,RFC3280,密码学,以及网络上的一些文章,有些内容如果涉及到版权问题,请及时通知作者,联系地址:zhangzhongl@gmail.com。
首先学习的内容是一个PKI的入门,文章参考IBM DW网站中的PKI入门文章。
 
由于因特网的不断使用,从前那种松懈的面向网络的安全性实践已经不足以保证数据的安全。其结果是,Public Key Infrastructure也就是“公钥基础结构”或 PKI 被证实是加密数据的可靠系统,而且商业社会也已经注意到了这一点。
因特网已经同时成为一般商业和公司业务的载体,日益被视为是与之连接的专用通信网的远程扩展来使用。当通过公共因特网发送敏感数据时安全性得不到足够的强调;而以在线商业为例,确保安全性是维护用户信心的必要条件。PKI 就是一个提供强大的开放数据加密和支持加密的服务的杰出方法。
自第一个计算机网络建立以来加密已经在数据通信中扮演了至关重要的角色,但它对于通过公共网络进行运行的企业尤为关键。当然,对信息进行编码以及维持其私有并不是新近的需求。在第二次世界大战期间,Enigma可能是最有名的战时代码,它给予了德国海军几乎赢得“大西洋战役”的作战优势。
内部与外部安全性
每位网络管理员或应用程序开发人员都非常重视数据安全性的重要性,但是在较友好的专用 LAN 领域内,安全性通常有较为宽松的含义。一个物理上只能由员工访问的网络等同于国内和平时期的数据通信――就象朋友间的聊天一样。 内部实践可能仅实施加密认证(登录)消息,而不是加密发送的大量数据――或者,其加密方法可能只是名义上的,而非特别强大。
因特网的开放使用使得其数据通信如同正在进行战争。由于私营公司考虑将它们的信息系统向因特网开放, 所以应用程序构建商就可能需要尝试把旧有的安全性实践扩展到这个不熟悉的环境中。用于验证用户的现有系统 是根据内部用户的概念进行设计的,它可能足以保护那些提供已经在公共域内的信息或具有最小价值的信息的应用程序的要求。
但是,内部安全性系统通常被证明不适合保护跨越因特网的通信安全,因为它们要么是专用的(一家公司或特定供应商所有),要么没有利用足够强大的数据加密 ― 或是两者兼而有之。专用系统经常需要用户在其 PC 上安装特定的软件组件,但这对于公共用户环境而言是不切实际的。当然,在在线零售或任何其它因特网商务中发送不加密的数据等于是自取灭亡。
PKI 是软件、加密技术和基于服务器的服务的结合,其设计填补了上述空白。它正是用大多数内部系统最缺乏的特性来保护通信安全:它使用了开放、公认的标准,并且同时加密了认证过程和数据。PKI 包含了其它一些离散的安全性技术(如数字证书),但它尤以其系统性方法著称。一个完整的 PKI 系统管理着认证中心(或从认证中心获取服务),而不仅仅是假设其可用性和在应用程序内利用它们。
公钥加密
就功能简单而言,PKI 的目的就是加密数据传输。当然,有很多的加密方法可用,但是它们中的大多数都会有一两个限制,这使得它们不适合于跨越因特网的交易。提到的最常见的问题之一就是,使用不得不为客户机手工配置的组件的专用技术。因此,大多数虚拟专用网(VPN)解决方案将由于为每个用户配置的成本问题以及用户将等不及访问等原因而无法正常工作。PKI 则可以让几乎任何因特网用户使用,因为客户机端兼容性已经结合到了访问因特网时最常用的一些浏览器软件(如 Microsoft Internet Explorer  Netscape Navigator)中。
另有一个不考虑诸多加密系统的问题对于其设计也极其重要:即它们利用一个秘密的加密密钥(一个用来编码文本的数学值),这个密钥必须让任何交易中的双方(客户机和服务器)都知道。这是密码术的经典原则;第二次世界大战中德国 U 型潜水艇都拥有一个密钥或密钥序列用于读写Enigma 密码。如果存在安全的分发密钥的方法对称加密的要害:分发密钥的方法),那么使用共享密钥的密码术就不存在任何缺陷。对于德国海军,密钥的分发方法是定期把船开到港口并亲手传递密码本。(这也就是对称加密或者称为私钥加密
问题在于而您站点上的因特网用户不太可能到您的港口来取密码本。这就形成一个问题:如果是在设置加密前通过因特网发送代码密钥,它是以明文方式发送的,那么任何企图窃听交易的人都可以轻易地截获该密钥。加密密钥本身就是任何密文中最脆弱的部分;Enigma使那些即使是欧洲和美国最优秀的密码破译人员的工作也遇到极大障碍,包括AlanTuring,并且永远不会被真正破译。协约国只有在潜水艇被击毁从而窃取密钥后才能够读取它
公钥加密的“主要特性”是它利用了一个包含两部分的密钥,其中一半由发送方持有,另一半则由接收方持有。想象一下,少男少女有时使用的一对分成两半的连心锁片中的一个:它上面印着的消息只有在两人都在时才能完整地读取。简而言之,它就象一个公钥对,但实际上在客户机-服务器通信中使用了四个密钥:通信双方各自有一个共同知晓的密钥(公钥)和一个私人拥有的密钥。密钥算法被构造成使用它们的特定组合来起作用。在发送数据时,发送方使用接收方的公钥;这个加密的作用是数据只能使用接收方私钥译出。
因为使用了这种双密钥过程的数学逻辑,这样通信双方就都不必知道完整的密钥组合,并且每个密钥都是唯一的。如果德国海军设计了使用PKI Enigma,那么就算捕获任何船只或潜水艇的私钥都不会造成惨重的损失,因为协约国只能获得读取特定船只的消息而不是整个海军的消息的能力。而且,他们不必担心密钥的分发,因为公钥可以通过公开的通信通道发送。公钥加密的关键操作是验证消息接收方的身份(只有拥有对应私钥的接受方才能查看消息),以便用正确的公钥进行加密。
PKI 组件
这个标识过程,以及公钥的存储是PKI系统的组成部分。其要点是:PKI 在其中心位置管理着数字证书,每个证书都由一个公钥和一个私钥组成,用以认证用户和加密数据。随着证书受到正确的管理,网络安全性甚至可以被配置为使用其它开放的标准加密技术(如 IPSec)进行数据传输
证书形成了公钥加密的标识和密码操纵部分,但PKI系统的中心是认证中心(CA),它将颁发和管理那些证书。CA 可能是由某个组织本地运作的,在这种情况下,它采用一台或多台服务器运行一种服务的形式,如Microsoft  Certificate Services for Windows 2000。但 CA 通常是外购的。在因特网上有很多公认的公共CA,如 VeriSign  Entrust,它们的身份已经被编写到大多数浏览器应用程序中
本地运作的CA 通常控制着公钥基础结构的其它大多数方面。在建立将使用 PKI 的应用程序时必须考虑的功能部分包括:
认证中心
数字证书
证书发布地点,这是存储和发布证书的地方。它是发布地点,可能是作为 CA 运作的机器上的一个磁盘目录,或一个安全性目录,如 Netscape  Microsoft  Active Directory
证书撤销列表(CRL,它是证书的一个参考列表,列表中的证书已标记为在它们原始到期日前被撤销。
管理工具
支持 PKI 的应用程序
证书的有效期
任何私营公司或其它组织在利用证书时都可能会考虑到外购部分的管理过程。即使 CA 角色受外部实体代理,安全性的级别还是将通过证书以有效期设置的策略来驱动,它由五个不同的阶段构成:
证书登记
从用户向 CA 请求证书开始利用PKI。(当然,对于最终用户来说,这应该是一个透明过程。)这是用户(实际是指用户的支持 PKI 的应用程序,如 Web 浏览器)和 CA 之间的合作过程,该过程从用户生成密钥对(公钥和私钥)时开始
登记还可能涉及登记信息的收集和显示,其中隐含了大量的策略。有些 CA 被设计成在授予证书前需要得到人许可,并且可能要求个人形成的证明,如直接对话或出示已公证的身份文档。当用户是大众商业实体(如在线零售商)时,这就很合理,因为客户需要得到可靠的证明,用以保证他们正是在与期望的公司进行通信。
完整的用户请求由公钥(自己生成的)和这一登记信息构成。一旦用户请求了证书,CA 就根据其建立的策略规则验证信息。如果确定信息有效,则CA 创建该证书。然后,CA 用户的公钥发送到指定的任何资源库(内部的目录或公用服务器),并使用该公钥把识别证书发送给用户。使用PKI加密,证书只能由生成匹配私钥的用户译码。
证书分发
登记过程的另一半,分发被视为单独的过程只是因为它可能涉及到在 CA 层次上的管理层的干预。这个阶段还包括对影响证书使用的策略的设置。
证书撤销
当发出证书时,将根据分发策略为它们配置特定的到期日。如果需要在该日期之前取消证书,则可以指示 CA 将这一事实发布和分发到证书撤销列表(CRL)中。浏览器和其它支持 PKI 的应用程序则配置成需要对当前 CRL检查 CA,并且如果他们无法验证某一证书还没有被添加到该列表,将不进行任何操作。证书可能会因各种原因而被撤销,包括证书接收方被泄露,或者 CA 本身被“黑”掉。
证书延期
当证书到达为它设置的到期日时,其用户可能需要(自动地,根据应用程序的配置)延期该证书。显然,这取决于最初设置的到期日,而且取决于 CA 持有的证书的到期日,因为 CA 不能颁发在其自己的到期日后又将到期的证书。
证书审计
证书审计的过程取决于 CA 的类型及其管理工具,但它是一项必要的任务。这主要涉及跟踪证书的创建和到期(以及可能的撤销),但在某些情况下还可以记录证书的每次成功使用。
外购 PKI
事实上 PKI 的每个组件都可以是外购的,以这样或那样的形式。运作其自己 CA 的组织通常会购买服务与管理软件,而不是随便从头创 CA 功能。还有一些厂商则提供咨询服务,特别是出于内部设计、创建或管理 PKI 的目的。
但是,涉及第三方公司的最常见选择,是将 CA 外包给一个商业团体。在某些方面这实际上是必需的;在管理大众商业时就期望使用它。如果在线零售商颁发其自己的数字证书,并且把浏览器配置成警告或拒绝他人的访问,那么用户很可能会对该零售商产生几分怀疑。
另一方面,商业性 CA 已经建立起来,并且应用程序期望它们成为大多数因特网证书的源泉。即使象 Microsoft 这样的公司,这些公司有强大的因特网存在,并且有能力颁发自己的证书, 仍然会为了它们自己的可信度而从其它公共 CA 处获取一些证书。
 
PKI技术及应用开发指南(摘自IBM)
前言
随着网络技术和信息技术的发展,电子商务已逐步被人们所接受,并在得到不断普及。但由于各种原因,国内电子商务的安全性仍不能得到有效的保障。在常规业务中,交易双方现场交易,可以确认购买双方的身份。利用商场开具的发票和客户现场支付商品费用,无须担心发生纠纷和无凭证可依。但通过网上进行电子商务交易时,由于交易双方并不现场交易,因此,无法确认双方的合法身份,同时交易信息是交易双方的商业秘密,在网上传输时必须保证安全性,防止信息被窃取;双方的交易非现场交易,一旦发生纠纷,必须能够提供仲裁。
因此,在电子商务中,必须从技术上保证在交易过程中能够实现身份认证、安全传输、不可否认性、数据完整性。在采用数字证书认证体系之前,交易安全一直未能真正得到解决。由于数字证书认证技术采用了加密传输和数字签名,能够实现上述要求,因此在国内外电子商务中,都得到了广泛的应用。
PKI采用证书进行公钥管理,通过第三方的可信任机构(认证中心,即CA),把用户的公钥和用户的其他标识信息捆绑在一起,其中包括用户名和电子邮件地址等信息,以在Internet网上验证用户的身份。PKI把公钥密码和对称密码结合起来,在Internet网上实现密钥的自动管理,保证网上数据的安全传输。
因此,从大的方面来说,所有提供公钥加密和数字签名服务的系统,都可归结为PKI系统的一部分,PKI的主要目的是通过自动管理密钥和证书,为用户建立起一个安全的网络运行环境,使用户可以在多种应用环境下方便的使用加密和数字签名技术,从而保证网上数据的机密性、完整性、有效性。数据的机密性是指数据在传输过程中,不能被非授权者偷看;数据的完整性是指数据在传输过程中不能被非法篡改;数据的有效性是指数据不能被否认。
一个有效的PKI系统必须是安全的和透明的,用户在获得加密和数字签名服务时,不需要详细地了解PKI的内部运作机制。在一个典型、完整和有效的PKI系统中,除证书的创建和发布,特别是证书的撤销,一个可用的PKI产品还必须提供相应的密钥管理服务,包括密钥的备份、恢复和更新等。没有一个好的密钥管理系统,将极大影响一个PKI系统的规模、可伸缩性和在协同网络中的运行成本。在一个企业中,PKI系统必须有能力为一个用户管理多对密钥和证书;能够提供安全策略编辑和管理工具,如密钥周期和密钥用途等。
PKI发展的一个重要方面就是标准化问题,它也是建立互操作性的基础。目前,PKI标准化主要有两个方面:一是RSA公司的公钥加密标准PKCSPublic Key Cryptography Standards,它定义了许多基本PKI部件,包括数字签名和证书请求格式等;二是由Internet工程任务组IETFInternet Engineering Task Force)和PKI工作组PKIXPublic Key Infrastructure Working Group)所定义的一组具有互操作性的公钥基础设施协议。在今后很长的一段时间内,PKCSPKIX将会并存,大部分的PKI产品为保持兼容性,也将会对这两种标准进行支持。
PKI的发展非常快,已经从几年前的理论阶段过渡到目前的产品阶段,并且出现了大量成熟技术、产品和解决方案,正逐步走向成熟。PKI的发展受应用驱动的影响,比如,早期的Internet商务和Web安全要求主要依赖于SSL,并要求应用首先对证书进行处理,所以,在很多公司的消息和群组产品中都提供了公钥和证书系统,如ExchangeNotes等。另外,基于标准的基础设施和应用也同样促进了PKI的发展,它能够保证基于Internet的安全消息传送的可交互性,如S/MIME等。
目前,PKI产品的生产厂家很多,比较有代表性的主要有VeriSignEntrustVeriSign作为RSA的控股公司,借助RSA成熟的安全技术,提供了PKI产品,为用户之间的内部信息交互提供安全保障。另外,VeriSign也提供对外的CA服务,包括证书的发布和管理等功能,并且同一些大的生产商,如MicrosoftNetscapeJavaSoft等,保持了伙伴关系,以在Internet上提供代码签名服务。
Entrust作为北方电讯(Northern Telecom)的控股公司,从事PKI的研究与产品开发已经有很多年的历史了,并一直在业界保持领先地位,拥有许多成熟的PKI及配套产品,并提供了有效的密钥管理功能。
另外,一些大的厂商,如Microsoft、Netscape和Novell等,都开始在自己的网络基础设施产品中增加PKI功能。Netscape已经开始把证书服务器作为了SuiteSpot的一部分,虽然其证书服务器没有Entrust产品的功能全面和完善,但提供了基本的证书生成和管理功能。即使没有密钥管理功能,但由于Netscape把证书服务器同SuiteSpot服务器和Communicator客户端产品的集成,依靠广泛的市场基础,也取得的越来越多的市场份额。由SUN和Netscape联盟组成的iplanet公司(Sun|Netscape Alliance)也在PKI方面做了很大的努力,凭借其在网络和电子商务方面的优势,发展了很多性能优越的PKI产品,如LDAP目录服务器和证书管理系统等。
 
2 PKI组成
PKI作为一组在分布式计算系统中利用公钥技术和X.509证书所提供的安全服务,企业或组织可利用相关产品建立安全域,并在其中发布密钥和证书。在安全域内,PKI管理加密密钥和证书的发布,并提供诸如密钥管理(包括密钥更新,密钥恢复和密钥委托等)、证书管理(包括证书产生和撤销等)和策略管理等。PKI产品也允许一个组织通过证书级别或直接交叉认证等方式来同其他安全域建立信任关系。这些服务和信任关系不能局限于独立的网络之内,而应建立在网络之间和Internet之上,为电子商务和网络通信提供安全保障,所以具有互操作性的结构化和标准化技术成为PKI的核心
PKI在实际应用上是一套软硬件系统和安全策略的集合,它提供了一整套安全机制,使用户在不知道对方身份或分布地很广的情况下,以证书为基础,通过一系列的信任关系进行通讯和电子商务交易。
一个典型的PKI系统如图1所示,其中包括PKI策略、软硬件系统、证书机构CA、注册机构RA、证书发布系统和PKI应用等。
PKI安全策略建立和定义了一个组织信息安全方面的指导方针,同时也定义了密码系统使用的处理方法和原则。它包括一个组织怎样处理密钥和有价值的信息,根据风险的级别定义安全控制的级别。一般情况下,在PKI中有两种类型的策略:一是证书策略,用于管理证书的使用,比如,可以确认某一CA是在Internet上的公有CA,还是某一企业内部的私有CA;另外一个就是CPSCertificate Practice Statement)。一些由商业证书发放机构(CCA)或者可信的第三方操作的PKI系统需要CPS。这是一个包含如何在实践中增强和支持安全策略的一些操作过程的详细文档。它包括CA是如何建立和运作的,证书是如何发行、接收和废除的,密钥是如何产生、注册的,以及密钥是如何存储的,用户是如何得到它的等等。
证书机构CAPKI的信任基础,它管理公钥的整个生命周期,其作用包括:发放证书、规定证书的有效期和通过发布证书废除列表(CRL)确保必要时可以废除证书。后面将会在CA进行详细介绍。
注册机构RA提供用户和CA之间的一个接口,它获取并认证用户的身份,向CA提出证书请求。它主要完成收集用户信息和确认用户身份的功能。这里指的用户,是指将要向认证中心(即CA)申请数字证书的客户,可以是个人,也可以是集团或团体、某政府机构等。注册管理一般由一个独立的注册机构(即RA)来承担。它接受用户的注册申请,审查用户的申请资格,并决定是否同意CA给其签发数字证书。注册机构并不给用户签发证书,而只是对用户进行资格审查。因此,RA可以设置在直接面对客户的业务部门,如银行的营业部、机构认识部门等。当然,对于一个规模较小的PKI应用系统来说,可把注册管理的职能由认证中心CA来完成,而不设立独立运行的RA。但这并不是取消了PKI的注册功能,而只是将其作为CA的一项功能而已。PKI国际标准推荐由一个独立的RA来完成注册管理的任务,可以增强应用系统的安全。
证书发布系统负责证书的发放,如可以通过用户自己,或是通过目录服务。目录服务器可以是一个组织中现存的,也可以是PKI方案中提供的。
PKI的应用非常广泛,包括在web服务器和浏览器之间的通讯、电子邮件、电子数据交换(EDI)、在Internet上的信用卡交易和虚拟私有网(VPN)等。



1 PKI组成框图
一个简单的PKI系统包括证书机构CA、注册机构RA和相应的PKI存储库。CA用于签发并管理证书;RA可作为CA的一部分,也可以独立,其功能包括个人身份审核、CRL管理、密钥产生和密钥对备份等;PKI存储库包括LDAP目录服务器和普通数据库,用于对用户申请、证书、密钥、CRL和日志等信息进行存储和管理,并提供一定的查询功能。
 
证书认证机构CA
3.1 数字证书基础
数字证书是一种数字标识,可以说是Internet上的安全护照或身份证明。当人们到其他国家旅行时,用户护照可以证实其身份,并被获准进入这个国家。数字证书提供的是网络上的身份证明。
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息和公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息,证书的格式遵循ITUT X.509国际标准。
3.1.1 证书格式 
Internet网络中,应用程序使用的证书都来自不同的厂商或组织,为了实现可交互性,要求证书能够被不同的系统识别,符合一定的格式,并实现标准化。X.509为证书及其CRL格式提供了一个标准。但X.509本身不是Internet标准,而是国际电联ITU标准,它定义了一个开放的框架,并在一定的范围内可以进行扩展。
为了适应PKI技术的发展,IETF也必须制定在Internet上使用X.509CRL的标准。PKIX工作组就提供了一个Internet草案"Part I: X.509 Certificate and CRL Profile"(详细内容可见:ftp://ftp.ietf.org/internet-drafts/draft-ietf-pkix-ipki-part1-11.txt),用于定义在Internet PKI中使用X.509CRL的方法和规范。该草案把X.509作为标准,并对各标准项和扩展做了说明,基本接收了X.509作为Internet中的证书标准,但也定义了被PKI应用的X.509 V3CRL V2标准格式的设置,这些设置包含了PKIX工作组对X.509所做的一些新的扩展。
X.509目前有三个版本:V1V2V3,其中V3是在V2的基础上加上扩展项后的版本,这些扩展包括由ISO文档(X.509-AM)定义的标准扩展,也包括由其他组织或团体定义或注册的扩展项。X.509ITU-T X.509(前身为CCITT X.509)或ISO/IEC 9594-8定义,最早以X.500目录建议的一部分发表于1988年,并作为V1版本的证书格式。X.5001993年进行了修改,并在V1基础上增加了两个额外的域,用于支持目录存取控制,从而产生了V2版本。
为了适应新的需求ISO/IECANSI X9发展了X.509 V3版本证书格式,该版本证书通过增加标准扩展项对V1V2证书进行了扩展。另外,根据实际需要,各个组织或团体也可以增加自己的私有扩展。
X.509 V1V2证书所包含的主要内容如下:
  • 证书版本号(Version):版本号指明X.509证书的格式版本,现在的值可以为0、1、2,也为将来的版本进行了预定义。
  • 证书序列号(SerialNumber):序列号指定由CA分配给证书的唯一的数字型标识符。当证书被取消时,实际上是将此证书的序列号放入由CA签发的CRL中,这也是序列号唯一的原因。
  • 签名算法标识符(Signature):签名算法标识用来指定由CA签发证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和hash算法,须向国际知名标准组织(如ISO)注册。
  • 签发机构名(Issuer):此域用来标识签发证书的CA的X.500 DN名字。包括国家、省市、地区、组织机构、单位部门和通用名。
  • 有效期(Validity):指定证书的有效期,包括证书开始生效的日期和时间以及失效的日期和时间。每次使用证书时,需要检查证书是否在有效期内。
  • 证书用户名(Subject):指定证书持有者的X.500唯一名字。包括国家、省市、地区、组织机构、单位部门和通用名,还可包含email地址等个人信息等
  • 证书持有者公开密钥信息(subjectPublicKeyInfo):证书持有者公开密钥信息域包含两个重要信息:证书持有者的公开密钥的值;公开密钥使用的算法标识符。此标识符包含公开密钥算法和hash算法。
  • 签发者唯一标识符(Issuer Unique Identifier):签发者唯一标识符在第2版加入证书定义中。此域用在当同一个X.500名字用于多个认证机构时,用一比特字符串来唯一标识签发者的X.500名字。可选。
  • 证书持有者唯一标识符(Subject Unique Identifier):持有证书者唯一标识符在第2版的标准中加入X.509证书定义。此域用在当同一个X.500名字用于多个证书持有者时,用一比特字符串来唯一标识证书持有者的X.500名字。可选。
  • 签名值(Issuer's Signature):证书签发机构对证书上述内容的签名值。
 
X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。标准扩展是指由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。
3.1.2 CRL格式 
证书废除列表CRLCertificate revocation lists,又称证书黑名单)为应用程序和其它系统提供了一种检验证书有效性的方式。任何一个证书废除以后,证书机构CA会通过发布CRL的方式来通知各个相关方。目前,同X.509 V3证书对对应的CRLX.509 v2 CRL,其所包含的内容格式如下:
  • CRL的版本号:0表示X.509 V1 标准;1表示X.509 V2 标准;目前常用的是同X.509 V3证书对应的CRL V2版本。
  • 签名算法:包含算法标识和算法参数,用于指定证书签发机构用来对CRL内容进行签名的算法。
  • 证书签发机构名:签发机构的DN名,由国家、省市、地区、组织机构、单位部门和通用名等组成。
  • 此次签发时间:此次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。
  • 下次签发时间:下次CRL签发时间,遵循ITU-T X.509 V2标准的CA在2049年之前把这个域编码为UTCTime类型,在2050或2050年之后年之前把这个域编码为GeneralizedTime类型。
  • 用户公钥信息,其中包括废除的证书序列号和证书废除时间。废除的证书序列号是指要废除的由同一个CA签发的证书的一个唯一标识号,同一机构签发的证书不会有相同的序列号。
  • 签名算法:对CRL内容进行签名的签名算法。
  • 签名值:证书签发机构对CRL内容的签名值。
 
另外,CRL中还包含扩展域和条目扩展域。CRL扩展域用于提供与CRL有关的额外信息部份,允许团体和组织定义私有的CRL扩展域来传送他们独有的信息;CRL条目扩展域则提供与CRL条目有关的额外信息部份,允许团体和组织定义私有的CRL条目扩展域来传送他们独有的信息。
3.1.3 证书的存放 
数字证书作为一种电子数据格式,可以直接从网上下载,也可以通过其他方式。
  • 使用IC卡存放用户证书。即把用户的数字证书写到IC卡中,供用户随身携带。这样用户在所有能够读IC卡证书的电子商务终端上都可以享受安全电子商务服务。
  • 用户证书直接存放在磁盘或自己的终端上。户将从CA申请来的证书下载或复制到磁盘或自己的PC机或智能终端上,当用户使用自己的终端享受电子商务服务时,直接从终端读入即可。
·         另外,CRL一般通过网上下载的方式存储在用户端。
 
3.2 CA框架模型
证书机构CA用于创建和发布证书,它通常为一个称为安全域(security domain)的有限群体发放证书。创建证书的时候,CA系统首先获取用户的请求信息,其中包括用户公钥(公钥一般由用户端产生,如电子邮件程序或浏览器等),CA将根据用户的请求信息产生证书,并用自己的私钥对证书进行签名。其他用户、应用程序或实体将使用CA的公钥对证书进行验证。如果一个CA系统是可信的,则验证证书的用户可以确信,他所验证的证书中的公钥属于证书所代表的那个实体。
CA还负责维护和发布证书废除列表CRLcertificate revocation lists,又称为证书黑名单)。当一个证书,特别是其中的公钥因为其他原因无效时(不是因为到期),CRL提供了一种通知用户和其他应用的中心管理方式。CA系统生成CRL以后,要么是放到LDAP服务器中供用户查询或下载,要么是放置在Web服务器的合适位置,以页面超级连接的方式供用户直接查询或下载。
一个典型的CA系统包括安全服务器、注册机构RACA服务器、LDAP目录服务器和数据库服务器等。如图2所示。



典型CA框架模型
  • 安全服务器:安全服务器面向普通用户,用于提供证书申请、浏览、证书撤消列表以及证书下载等安全服务。安全服务器与用户的的通信采取安全信道方式(如SSL的方式,不需要对用户进行身份认证)。用户首先得到安全服务器的证书(该证书由CA颁发),然后用户与服务器之间的所有通信,包括用户填写的申请信息以及浏览器生成的公钥均以安全服务器的密钥进行加密传输,只有安全服务器利用自己的私钥解密才能得到明文,这样可以防止其他人通过窃听得到明文。从而保证了证书申请和传输过程中的信息安全性。
  • CA服务器:CA服务器使整个证书机构的核心,负责证书的签发。CA首先产生自身的私钥和公钥(密钥长度至少为1024位),然后生成数字证书,并且将数字证书传输给安全服务器。CA还负责为操作员、安全服务器以及注册机构服务器生成数字证书。安全服务器的数字证书和私钥也需要传输给安全服务器。CA服务器是整个结构中最为重要的部分,存有CA的私钥以及发行证书的脚本文件,出于安全的考虑,应将CA服务器与其他服务器隔离,任何通信采用人工干预的方式,确保认证中心的安全。
  • 注册机构RA:登记中心服务器面向登记中心操作员,在CA体系结构中起承上启下的作用,一方面向CA转发安全服务器传输过来的证书申请请求,另一方面向LDAP服务器和安全服务器转发CA颁发的数字证书和证书撤消列表。
  • LDAP服务器:LDAP服务器提供目录浏览服务,负责将注册机构服务器传输过来的用户信息以及数字证书加入到服务器上。这样其他用户通过访问LDAP服务器就能够得到其他用户的数字证书。
  • 数据库服务器:数据库服务器是认证机构中的核心部分,用于认证机构中数据(如密钥和用户信息等)、日志合统计信息的存储和管理。实际的的数据库系统应采用多种措施,如磁盘阵列、双机备份和多处理器等方式,以维护数据库系统的安全性、稳定性、可伸缩性和高性能。
 
3.3 证书的申请和撤销
证书的申请有两种方式,一是在线申请,另外一个就是离线申请。在线申请就是通过浏览器或其他应用系统通过在线的方式来申请证书,这种方式一般用于申请普通用户证书或测试证书。离线方式一般通过人工的方式直接到证书机构证书受理点去办理证书申请手续,通过审核后获取证书,这种方式一般用于比较重要的场合,如服务器证书和商家证书等。下面讨论的主要是在线申请方式。
当证书申请时,用户使用浏览器通过Internet访问安全服务器,下载CA的数字证书(又叫做根证书),然后注册机构服务器对用户进行身份审核,认可后便批准用户的证书申请,然后操作员对证书申请表进行数字签名,并将申请及其签名一起提交给CA服务器。
CA操作员获得注册机构服务器操作员签发的证书申请,发行证书或者拒绝发行证书,然后将证书通过硬拷贝的方式传输给注册机构服务器。注册机构服务器得到用户的证书以后将用户的一些公开信息和证书放到LDAP服务器上提供目录浏览服务,并且通过电子邮件的方式通知用户从安全服务器上下载证书。用户根据邮件的提示到指定的网址下载自己的数字证书,而其他用户可以通过LDAP服务器获得他的公钥数字证书。
证书申请的步骤如下:
  1. 用户申请 
    用户首先下载CA的证书,又叫根证书,然后在证书的申请过程中使用SSL安全方式与服务器建立连接,用户填写个人信息,浏览器生成私钥和公钥对,将私钥保存客户端特定文件中,并且要求用口令保护私钥,同时将公钥和个人信息提交给安全服务器。安全服务器将用户的申请信息传送给注册机构服务器。
  2. 注册机构审核 
    用户与注册机构人员联系,证明自己的真实身份,或者请求代理人与注册机构联系。 注册机构操作员利用自己的浏览器与注册机构服务器建立SSL安全通信,该服务器需要对操作员进行严格的身份认证,包括操作员的数字证书、IP地址,为了进一步保证安全性,可以设置固定的访问时间。操作员首先查看目前系统中的申请人员,从列表中找出相应的用户,点击用户名,核对用户信息,并且可以进行适当的修改,如果操作员同意用户申请证书请求,必须对证书申请信息进行数字签名。操作员也有权利拒绝用户的申请。操作员与服务器之间的所有通信都采用加密和签名,具有安全性、抗否认性,保证了系统的安全性和有效性。
  3. CA发行证书 
    注册机构RA通过硬拷贝的方式向CA传输用户的证书申请与操作员的数字签名,CA操作员查看用户的详细信息,并且验证操作员的数字签名,如果签名验证通过,则同意用户的证书请求,颁发证书。然后CA将证书输出。如果CA操作员发现签名不正确,则拒绝证书申请, CA颁发的数字证书中包含关于用户及CA自身的各种信息,如:能唯一标识用户的姓名及其他标识信息,如个人的email地址;证书持有者的公钥。公钥用于为证书持有者加密敏感信息、签发个人证书的认证机构的名称、个人证书的序列号和个人证书的有效期(证书有效起止日期)等
  4. 注册机构证书转发 
    注册机构RA操作员从CA处得到新的证书,首先将证书输出到LDAP目录服务器以提供目录浏览服务,最后操作员向用户发送一封电子邮件,通知用户证书已经发行成功,并且把用户的证书序列号告诉用户到指定的网址去下载自己的数字证书。并且告诉用户如何使用安全服务器上的LDAP配置,让用户修改浏览器的客户端配置文件以便访问LDAP服务器,获得他人的数字证书。
  5. 用户证书获取 
    用户使用证书申请时的浏览器到指定的网址,键入自己的证书序列号,服务器要求用户必须使用申请证书时的浏览器,因为浏览器需要用该证书相应的私钥去验证数字证书。只有保存了相应私钥的浏览器才能成功下载用户的数字证书。
 
这时用户打开浏览器的安全属性,就可以发现自己已经拥有了CA颁发的数字证书,可以利用该数字证书与其他人以及web服务器(拥有相同CA颁发的证书)使用加密、数字签名进行安全通信。
认证中心还涉及到CRL的管理。用户向特定的操作员(仅负责CRL的管理)发一份加密签名的邮件,申明自己希望撤消证书。操作员打开邮件,填写CRL注册表,并且进行数字签名,提交给CACA操作员验证注册机构操作员的数字签名,批准用户撤消证书,并且更新CRL,然后CA将不同格式的CRL输出给注册机构,公布到安全服务器上,这样其他人可以通过访问服务器得到CRL
证书撤销流程步骤如下:
  1. 用户向注册机构操作员CRLManager发送一封签名加密的邮件,声明自己自愿撤消证书。
  2. 这册机构同意证书撤消,操作员键入用户的序列号,对请求进行数字签名。
  3. CA查询证书撤消请求列表,选出其中的一个,验证操作员的数字签名,如果正确的话,则同意用户的证书撤消申请,同时更新CRL列表,然后将CRL以多种格式输出。
  4. 注册机构转发证书撤消列表。操作员导入CRL,以多种不同的格式将CRL公布于众。
  5. 用户浏览安全服务器,下载或浏览CRL。
 
在一个PKI,特别是CA中,信息的存储是一个非常核心的问题,它包括两个方面:一是CA服务器利用数据库来备份当前密钥和归档过期密钥,该数据库需高度安全和机密,其安全等级同CA本身相同;另外一个就是目录服务器,用于分发证书和CRL,一般采用LDAP目录服务器。
3.4 密钥管理
密钥管理也是PKI(主要指CA)中的一个核心问题,主要是指密钥对的安全管理,包括密钥产生、密钥备份、密钥恢复和密钥更新等。
1. 密钥产生 
密钥对的产生是证书申请过程中重要的一步,其中产生的私钥由用户保留,公钥和其他信息则交于CA中心进行签名,从而产生证书。根据证书类型和应用的不同,密钥对的产生也有不同的形式和方法。对普通证书和测试证书,一般由浏览器或固定的终端应用来产生,这样产生的密钥强度较小,不适合应用于比较重要的安全网络交易。而对于比较重要的证书,如商家证书和服务器证书等,密钥对一般由专用应用程序或CA中心直接产生,这样产生的密钥强度大,适合于重要的应用场合。 
另外,根据密钥的应用不同,也可能会有不同的产生方式。比如签名密钥可能在客户端或RA中心产生,而加密密钥则需要在CA中心直接产生。
2. 密钥备份和恢复 
在一个PKI系统中,维护密钥对的备份至关重要,如果没有这种措施,当密钥丢失后,将意味着加密数据的完全丢失,对于一些重要数据,这将是灾难性的。所以,密钥的备份和恢复也是PKI密钥管理中的重要一环。 
使用PKI的企业和组织必须恩能够得到确认:即使密钥丢失,受密要加密保护的重要信息也必须能够恢复,并且不能让一个独立的个人完全控制最重要的主密钥,否则将引起严重后果。 
企业级的PKI产品至少应该支持用于加密的安全密钥的存储、备份和恢复。密钥一般用口令进行保护,而口令丢失则是管理员最常见的安全疏漏之一。所以,PKI产品应该能够备份密钥,即使口令丢失,它也能够让用户在一定条件下恢复该密钥,并设置新的口令。 
例如,在某些情况下用户可能有多对密钥,至少应该有两个密钥:一个用于加密,一个用于签名。签名密要不需要备份,因为用于验证签名的公钥(或公钥证书)广泛发布,即使签名私钥丢失,任何用于相应公要的人都可以对已签名的文档进行验证。但PKI系统必须备份用于加密的密钥对,并允许用户进行恢复,否则,用于解密的私钥丢失将意味着加密数据的完全不可恢复。 
另外,使用PKI的企业也应该考虑所使用密钥的生命周期,它包括密钥和证书的有效时间,以及已撤销密钥和证书的维护时间等。
3. 密钥更新 
对每一个由CA颁发的证书都会有有效期,密钥对生命周期的长短由签发证书的CA中心来确定,各CA系统的证书有效期限有所不同,一般大约为2-3年。 
当用户的私钥被泄漏或证书的有效期快到时,用户应该更新私钥。这时用户可以废除证书,产生新的密钥对,申请新的证书。
3.5 证书的使用
在实际应用中,为了验证信息的数字签名,用户首先必须获取信息发送者的公钥证书,以及一些额外需要的证书(如CA证书等,用于验证发送者证书的有效性)。
证书的获取可以有多种方式,如发送者发送签名信息时附加发送自己的证书,或以另外的单独信息发送证书,或者可以通过访问证书发布的目录服务器来获得,或者直接从证书相关的实体处获得。在一个PKI体系中,可以采取某种或某几种上述方式获得证书。
在电子商务系统中,证书的持有者可以是个人用户、企事业单位、商家、银行等。无论是电子商务中的哪一方,在使用证书验证数据时,都遵循同样的验证流程。一个完整的验证过程有以下几步:
  1. 将客户端发来的数据解密 (如解开数字信封)。
  2. 将解密后的数据分解成原始数据,签名数据和客户证书三部分。
  3. 用CA根证书验证客户证书的签名完整性。
  4. 检查客户证书是否有效 (当前时间在证书结构中的所定义的有效期内)。
  5. 检查客户证书是否作废 (OCSP方式或CRL方式)。
  6. 验证客户证书结构中的证书用途。
  7. 客户证书验证原始数据的签名完整性。
 
如果以上各项均验证通过,则接受该数据。
 
4 PKI应用
---PKI技术的广泛应用能满足人们对网络交易安全保障的需求。当然,作为一种基础设施,PKI的应用范围非常广泛,并且在不断发展之中,下面给出几个应用实例。
1. 虚拟专用网络(VPN 
VPN
是一种架构在公用通信基础设施上的专用数据通信网络,利用网络层安全协议(尤其是IPSec)和建立在PKI上的加密与签名技术来获得机密性保护。基于PKI技术的IPSec协议现在已经成为架构VPN的基础,它可以为路由器之间、防火墙之间或者路由器和防火墙之间提供经过加密和认证的通信。虽然它的实现会复杂一些,但其安全性比其他协议都完善得多。
2. 安全电子邮件 
----
作为Internet上最有效的应用,电子邮件凭借其易用、低成本和高效已经成为现代商业中的一种标准信息交换工具。随着Internet的持续增长,商业机构或政府机构都开始用电子邮件交换一些秘密的或是有商业价值的信息,这就引出了一些安全方面的问题,包括:消息和附件可以在不为通信双方所知的情况下被读取、篡改或截掉;发信人的身份无法确认。电子邮件的安全需求也是机密、完整、认证和不可否认,而这些都可以利用PKI技术来获得。目前发展很快的安全电子邮件协议是S/MIME (The Secure Multipurpose Internet Mail Extension),这是一个允许发送加密和有签名邮件的协议。该协议的实现需要依赖于PKI技术。
3. Web安全 
----
浏览Web页面是人们最常用的访问Internet的方式。如果要通过Web 进行一些商业交易,该如何保证交易的安全呢?为了透明地解决Web的安全问题,在两个实体进行通信之前,先要建立SSL连接,以此实现对应用层透明的安全通信。利用PKI技术,SSL协议允许在浏览器和服务器之间进行加密通信。此外服务器端和浏览器端通信时双方可以通过数字证书确认对方的身份。-结合SSL协议和数字证书,PKI技术可以保证Web 交易多方面的安全需求,使Web上的交易和面对面的交易一样安全。
 
 
关于CA模式产生背景及基本原理
问题产生:
前面几章对于公开钥加密的应用作了一定的阐述。但是,公开钥加密有一个不能不正视的问题,那就是你凭什么来判断你获得的public key是真的。如果有人从一开始就伪造身份,让接受到公开钥的人以为这是另外需要发送消息的人的公开钥,并且用这个钥去验证伪造者发出的加密情报。后果。。。。。我不说也知道了把,一直都是被虚假消息所欺骗,而且还误以为真。还有可能同时把自己真实的情报用假的公开钥加密后发送给伪造者。

解决:
怎么办?这时候我们需要的显然是一种可以判断公开钥所有者真实性的机制。于是两种主要的认证方式应运而生。
1
PGP模式
Pretty Good Privacy
比方说: 
A
同学想要取得C同学的公开钥。这时候有一位B同学和A同学,C同学都有着信赖关系。
然后B同学就把他所知道的正确的C同学的公开钥上面电子签名后传给A
A
同学和B同学由于有信赖关系,所以检查签名就知道数据没有问题,拿到的是真的C的公开钥

缺点:不宜在没有管理主体的大规模应用中推广

2
CA模式
Certification Authority(
认证机构)
这是一种由可信任的第三方机关(TTP Trusted Third Party)来保证公开钥所有者的方法。

发行方法:
TTP
首先对公开钥的所有者进行确认,然后发行证书(Certificate)。
在证书里面,有公开钥和关于公开钥所有者的证明情报。
为了防止恶意修改,附加上TTP的署名。
也就是说证书Certificate 公钥拥有者情报+公钥+认证机构的数字签名
发行证书的TTP,就是我们常说的CA认证机构。

认证方法: 
公钥发行者向CA提出申请,CA确认该公钥发行者后然后签发证书。
公钥发行者把证书发给需要的人。接受者通过该证书和CA签名来确认真伪。
如果为真,得到需要的公开钥。

该技术的前提是CA必须是可信任的。对于CA来说,有公开的CPS: Certificate Practice Statement档来确认,一般来说,CA都是由政府来负责推广认定的。

另外:
CA
为了证明自己也需要证明书。但是,CA的证书里面是他自己的数字签名。
这样的证明书叫做自己签名证书。大型项目里面,也有CA的证明书是由别的CA来签名的情况。
原创粉丝点击