概述
目前最常用的第三方认证服务包括:PKI/CA和Kerberos。PKI/CA是基于非对称密钥体系的,Kerberos是基于对称密钥体系的。
数字证书:提供一种发布公钥的简便途径;
数字签名:用来确认信息发送者的身份,保证信息的完整性和抗否认性。
概念
PKI
PKI(Public Key Infrastructure)即公钥基础设施,一组由硬件、软件、参与者、管理政策与流程组成的基础架构,提供公钥加密和数字签名服务的系统,目的是为了自动管理密钥和证书,保证网上数据信息传输的机密性、真实性、完整性和不可否认性。PKI采用证书进行公钥管理,通过第三方的可信任机构,把用户的公钥和用户的其它标识信息捆绑在一起,从而在网上验证用户的身份。
PKI从技术上解决网络通信安全的种种障碍。CA从运营、管理、规范、法律、人员等多个角度来解决网络信任问题。由此统称为"PKI/CA"。从总体构架来看,PKI/CA主要由最终用户、认证中心和注册机构来组成。
一个PKI系统由公钥密码技术(Public Key Cryptography)、证书认证机构(CA,Certificate Authority,认证中心)、注册机构(RA,Registration Authority)、数字证书(Digital Certificate)和相应的PKI存储库组成。
PKI的结构模型中有三类实体:
- 管理实体是PKI的核心,是服务的提供者;
- 端实体是PKI的用户,是服务的使用者;
- 证书库是一个分布式数据库,用于证书和CRL的存放和检索。
CA
一个向个人、计算机或任何其它实体颁发证书的可信实体。CA受理证书服务申请,根据证书管理策略验证申请方的信息,然后用其私钥对证书进行签名,并颁发该证书给申请方。
最重要的用途就是提供根证书,用来加强服务器和客户端之间信息交互的安全性。
从机制上来说,任何人或组织都可以扮演 CA 的角色,只是很难可以得到绝大部分客户端的信任。常见的 CA 提供商:DigiCert、GoDaddy、GlobalSign、VeriSign。Windows 一般会内置自己的根证书,CentOS 会内置 Mozilla Foundation 的根证书。一个新的 CA 公司,至少要 5~10 年才会被广泛信任,进入到根证书链,所以,通常开始是给 CA 付钱,买次级证书。
签署一个证书的成本可以忽略,但是证书的价格都很高。其实 CA 公司的主要成本构成在于审核、保险担保费用等,例如要想进入到各个浏览器的根证书列表,需要通过 WebTrust 的审计,部分浏览器会对根证书收费;提供 CRL、OCSP 甚至 HSM 的服务器成本,也包括了支持证书申请、更新、撤销、恢复等操作的平台支持;而且在用户提交 CSR 之后,CA 需要进行多项认证,而且越高级证书验证越复杂;当然,也包括保险费用。
选择 CA 时重点评估:
- 内置根证书范围,内置越多的系统、浏览器就说明其覆盖的面越广;
- 保证体系是否完善,包括之前是否黑历史,如 DigiNotar 直接倒闭;
- 核心功能的支持,例如 SNI、CAA 等的支持。
CA和RA是两种管理实体:
CA是框架中唯一能够发布和撤销证书的实体,维护证书的生命周期;
RA负责处理用户请求,在验证请求的有效性后,代替用户向CA提交。
RA可以单独实现,也可以合并在CA中实现。作为管理实体,CA和RA以证书方式向端实体提供公开密钥的分发服务。
不同的实体间通过PKI操作完成证书的请求、确认、发布、撤销、更新和获取等过程。
PKI操作分为存取操作和管理操作两类,其中存取操作包括管理实体或端实体把证书和CRL存放到证书库、从证书库中读取证书和CRL;管理操作则是管理实体与端实体之间或管理实体与管理实体之间的交互,是为了完成证书的各项管理任务和建立证书链。
CRL
PKI系统系统中的一个结构化的数据文件,该文件包含了证书颁发机构(CA)已经吊销的证书的序列号及其吊销日期。CRL文件中还包含证书颁发机构信息、吊销列表失效时间和下一次更新时间、以及采用的签名算法等。证书吊销列表最短的有效期为1个小时,一般为1天,甚至1个月不等,由各个证书颁发机构在设置其证书颁发系统时设置。
证书具有一定的使用期限,但是由于密钥被泄露、业务终止等原因,CA可通过撤销证书缩短证书的使用期限。一个证书一旦被撤消,证书中心就要公布CRL来声明该证书是无效的,并列出不能再使用的证书的序列号。
作用:
浏览器在使用https://访问已经部署SSL证书的网站时,一定会先检查此SSL证书是否已经被吊销,也就是说会查询吊销列表或OCSP服务,如果此证书已经被证书颁发机构吊销,则会显示告警信息:“此组织的证书已被吊销。安全证书问题可能显示试图欺骗您或截获您向服务器发送的数据。建议关闭此网页,并且不要继续浏览该网站。”
值得注意的是:目前有些CA颁发的证书和大部分自签的SSL证书都没有提供吊销列表(CRL)服务或CDP是不可访问的,当然更别提OCSP服务,这是非常危险的,因为如果证书丢失或被盗而无法吊销的话,就极有可能被用于非法用途而让用户蒙受损失。
在使用HTTPS(SSL)访问WEB站点时,浏览器会从服务器上下载其证书,并根据证书的CDP指定的URL下载CRL,检查当前的证书是否在列表内。CRL包含有下一次的更新的日期,在该日期到来之前,Windows会直接使用已被缓存起来的CRL,等到下一次的更新日期到来之后才会再次下载CRL。
证书具有一个指定的寿命,但 CA 可通过称为证书吊销的过程来缩短这一寿命。CA 发布一个证书吊销列表 (CRL),列出被认为不能再使用的证书的序列号。CRL 指定的寿命通常比证书指定的寿命短得多。CA 也可以在 CRL 中加入证书被吊销的理由。它还可以加入被认为这种状态改变所适用的起始日期。
CDP
证书吊销列表分发点(CRL Distribution Point)是包含在数字证书中的一个可以供各种应用软件自动下载最新的CRL的位置信息。一个CDP通常出现在数字证书的详细信息选项卡的CRL分发点,一般会列出多个使用不同的访问方法,以确保如Web浏览器和Web服务器程序始终可以获取最新的CRL。CDP一般是一个可以访问的URL地址。
OCSP
Online Certificate Status Protocol,证书状态在线查询协议,是IETF颁布的用于实时查询数字证书在某一时间是否有效的标准。
一般CA都只是每隔一定时间(几天或几个月)才发布新的吊销列表,可以看出:CRL是不能及时反映证书的实际状态的。而OCSP就能满足实时在线查询证书状态的要求。它为电子商务网站提供一种实时检验数字证书有效性的途径,比下载和处理CRL的传统方式更快、更方便和更具独立性。请求者发送查询请求,OCSP服务器会放回证书可能的三个状态:正常、吊销和未知。
OCSP服务由独立的OCSP服务器来提供服务,OCSP也是一个可以访问的URL地址。
其他
- PKC(Public Key Cryptography):用户使用公钥密码技术产生密钥对,分别为公钥(public key)和私钥(private key),公钥向外界公开,私钥则自己保留。公钥与私钥互为补充,被一个密钥加密的数据,只可以用相匹配的另外一个密钥解密
- RA:RA是CA的延伸,RA向CA转发证书服务申请,也向目录服务器转发CA颁发的数字证书和证书撤消列表,以提供目录浏览和查询服务
- TTP(Trusted third party)可信赖的第三者也常被用来指证书中心
- TGS(Ticket-Granting Server):票据授予服务器
- AS(Authentication Server):鉴别服务器
- KDC(Key Distribution Center):密钥分配中心
数字证书
数字证书的构成元素主要包括:证书主体、证书颁发者、公钥、证书有效期、数字签名等。证书主体指证书所代表的主体身份,证书颁发者则是证书的签发者和管理者。公钥是数字证书的核心元素,并且公钥不变。数字证书的安全性和可信任性与数字签名息息相关。
数字证书可分为自签名证书和公开信任证书,前者由证书的持有者自己签发,后者则是由专门机构颁发实现公开信任。
数字签名
网络中发送的重要文件、数据和信息等。无论是发送方、接收方还是第三方,都不应该对其进行修改。数字签名可实现这个目标。
数字签名的构成元素:原文信息、数字摘要、私钥和公钥。原文信息是签名对象,在签名过程中不会被修改。数字摘要是对原文信息进行处理后的结果,为了避免在数据传输过程中被篡改,使用散列算法(Hash)处理,而后再进行加密操作。私钥和公钥则是加密方式的不同,私钥用于数据加密,公钥用于数据解密。
数字签名的大致过程:信息发送方利用自己的私钥进行签名,发送方把这个签名和信息一起发送给接收方。接收方收到信息后利用发送方的公钥来对其中的数字签名进行验证,确认其合法性。
两个环节:
- 数字签名的生成:对于要传输的消息原文使用消息摘要算法(MD5、SHA)生成消息摘要,发送方使用自己的私钥对摘要进行加密,生成数字签名。
- 数字签名的验证:数字签名同消息一通传输给接收方,接收方对签名使用发送方的公钥解密还原摘要,并对得到的原文进行hash计算出消息摘要,比对两份消息摘要是否相同,可以保证消息的完整性和抗否认性。
用发送发私钥生成数字签名、用发送方公钥解密,可以证明消息确实是由公钥拥有者发出的。
两份摘要的比对结果,可以证明消息在传输的过程中是否被改动。
数字签名用于对数据的签名,以证明数字信息的完整性和真实性,而数字证书则更多的是用于证实某个主体(公司或个人)身份的真实性。
数字证书
数字签名要发挥作用,首先需要接收方获取发送方的公钥。如何证明获取的公钥确实是发送方的公钥而不是假冒的呢?数字证书提供了一种发布公钥的简便方法。
两个过程:
- 数字证书的生成:CA收到数字证书申请并认证申请者的真实身份后,把申请者的公钥、身份等信息作为消息原文,进行hash生成摘要,并用CA的私钥加密进行签名;数字签名与证书拥有者的公钥、身份等其他信息共同组成数字证书。
- 数字证书的验证:数字证书生成后,经历图2中3、4、5的传输过程,来到接收方。接收方收到消息证书后,使用CA公钥对数字签名解密生成消息摘要,对证书内容进行hash生成摘要,两份摘要进行比对可证明证书内容的完整性与真实性。
使用CA私钥进行签名和解密,可以证明证书确实是由CA发布的;
两份摘要的对比结果,可以证明证书内容是否在传输过程中被改动;
如果消息原文中的公钥和身份信息是CA的,则是CA自签名的过程。
证书类型
在申请 SSL/TLS 证书时,按照安全等级、审核严格程度、成本开销等,可以将证书主要分成三(四)类:
- Domain Validation,DV 域名验证型证书,最简单的,通过验证域名所有权即可签发证书,适合个人和小微企业申请,浏览器中会有锁标识。
- Organization Validation,OV 企业验证型证书,除了验证域名所有权之外,还会检查申请企业的真实身份,使用最广的,通常中小企业、非营利、政府机构会申请,浏览器中除了锁标识外,还可以查看企业信息。
- Extended Validation,EV 增强验证型证书,证书审核级别为所有类型最严格验证方式,再 OV 的基础上增加额外验证其它相关信息,如银行开户信息,多用于银行、金融、证券等高安全标准行业,浏览器中会有独特的绿色标识。
- Individual Validation,IV 证书,通常个人使用。
简单来说,可以按照申请方的身份简单区分:个人申请 DV 类型证书,中小企业选择 OV 类型证书,大型企业、银行、金融、支付等行业申请 EV 类型证书。而且,OV 及其以上的类型可以做到身份认证,而 DV 不具备身份认证功能;OV 以上支持目前国际主流 ECC 算法,可以做到更快,更复杂的加密防护。
三种不同的类型可以通过浏览器查看,不同类型在 Subject 字段的详细程度不同,功能越多,验证越严格,价格越昂贵,字段信息当然越多。
证书申请
由用户自己生成 Certificate Signing Request,即CSR 后,向 CA 提出申请,CA 在核实申请者身份后,会用自己的私钥对信息进行签名生成证书。
服务器则将这份由 CA 颁发的公钥证书在握手阶段发送给客户端,证书就相当于是服务器的身份证。
在验证证书的有效性时,会逐级去寻找签发者的证书,直至根证书为结束,然后通过公钥一级一级验证数字签名的正确性。
无论如何,都需要有根证书才可以的,有些浏览器(如IE,Chrome等)使用系统的证书,而有些是自己管理(如Firefox)。
证书撤销
- 用户申请:用户向RA发送一封签名加密邮件,申请撤销证书
- RA审核:注册机构同意证书撤销,并对申请签名
- CA更新CRL:CA验证证书撤销请求的RA签名,如果正确,则同意申请,并更新CRL,并输出
- RA转发CRL:注册中心收到CRL,以多种方式将CRL公布(包括LDAP服务器)
- 用户告知:用户访问LDAP服务器,下载或浏览CRL。
证书导入
Firefox 使用自己的证书管理器 (Certificates Manager),并没有像 IE 和 Chrome 那样直接使用系统中的证书存储,所以,需要将自签发的 SSL 证书导入受信任根证书。在Preference->Privacy&Security->Certificates->Certificate Manager
选项中导入生成的证书文件即可,列表中是按照 Organize 排序的
其他
缺点
成本高