前言
消息摘要算法用于验证数据完整性服务,对称加密算法和非对称加密算法用于保证数据保密性服务,数字签名算法用于抗否认性服务。
数字证书集合了多种密码学算法:
自身带有公钥信息,可完成相应的加密/解密操作;同时,还带有数字签名,可鉴别消息来源;且自身带有消息摘要信息,可验证证书的完整性;由于证书本身含有用户身份信息,因而具有认证性。
数字证书
数字证书具备常规加密/解密必要的信息,包含签名算法,可用于网络数据加密/解密交互,标识网络用户 (计算机)身份。
数字证书为发布公钥提供了一种简便的途径,其数字证书则成为加密算法以及公钥的载体。
数字证书 (Digital Certificate) 也称为电子证书,类似于我们生活中的身份证,用于标识网络中的用户 (计算机)身份。在现实生活中,我们的身份证需由公安机关的签发,而网络用户(计算机)的身份凭证则需由数字证书颁发认证机构(Certificate Authority,CA) 签发,只有经过CA签发的证书在网络中才具备可认证性。
VeriSign、GeoTrust和Thawte 是国际权威数字证书颁发认证机构的“三巨头”。其中,应用最为广泛的是VeriSign签发的电子商务用数字证书。
CA
通常,这种由国际权威数字证书颁发认证机构颁发的数字证书需要向用户收取昂贵的申请和维护费用。但并不是所有的国际权威数字证书颁发认证机构都收费,CAcert就是一个免费的数字证书颁发国际组织。
随着用户群的增大和颁发手段的可信性,这种免费的数字证书可信度也越来越高。
证书的签发过程实际上是对申请数字证书的公钥做数字签名,证书的验证过程实际上是对数字证书的公钥做验证签名,其中还包含证书有效期验证。
CA 颁发给自己的数字证书,也称为“根证书”。
通过使用由CA颁发的数字证书,我们可以对网络上传输的数据进行加密/解密和签名/验证操作,确保数据的机密性、完整性和抗否认性。
同时,数字证书中包含的用户信息可以明确地标识交易实体身份,具有认证性,保证交易实体身份的真实性,从而保障网络应用的安全性。
PKI
Public Key Infrastructure(PKI)是一种安全架构,用于管理数字证书和密钥的创建、分发、存储和撤销。PKI 提供了一种基础设施,以确保通信和数据在计算机网络上的安全性和完整性。它依赖于公钥加密算法,其中一对密钥用于加密和解密信息:一个是公钥,另一个是私钥。
PKI 的主要组成部分包括以下几个方面:
-
证书颁发机构(CA): CA 是 PKI 的核心组件之一。它负责验证实体的身份(如个人、组织或设备),并签发数字证书,证明公钥与特定实体相关联。CA 是信任的实体,其签名用于验证数字证书的真实性。
-
数字证书: 数字证书是一种包含公钥、所有者身份信息和数字签名的数据结构。CA签发数字证书,证书用于在通信中验证公钥的所有者身份。
-
注册机构(RA): RA 是与 CA 相关的机构,负责验证证书请求者的身份信息,然后将这些信息传递给 CA 进行证书签发。RA 的存在有助于减轻 CA 的负担。
-
密钥对: PKI 使用公钥加密算法,因此每个实体都拥有一对密钥:公钥和私钥。
-
证书撤销列表(CRL): CRL 是一个包含已被撤销证书序列号的列表。这使得在使用证书时能够检查其有效性,而不仅仅依赖于证书的签发。
PKI 在保护信息系统、网络通信和数字身份方面发挥着关键作用,广泛用于安全协议和通信协议,例如SSL/TLS用于加密网站通信。
数字证书的常用算法
目前,数字证书中最为常用的非对称加密算法是RSA算法,与之配套使用的签名算法是SHA1withRSA算法,而最为常用的消息摘要算法是SHA1算法。
除了使用RSA算法外,我们还可以使用DSA算法。只是使用DSA算法无法完成加密/解密实现,即这样的数字证书不包括数据加密/解密功能。
数字证书的文件编码格式
数字证书通常以不同的文件编码格式存储,最常见的三种格式是:
-
PEM(Privacy Enhanced Mail): PEM 是一种常见的证书编码格式,它使用 Base64 编码将证书数据包装在文本文件中。PEM 格式的文件通常以
.pem
或.crt
为扩展名。PEM 格式不仅可以包含证书,还可以包含私钥和其他相关信息。以下是一个 PEM 格式的示例:-----BEGIN CERTIFICATE----- MIIF7DCCBNWgAwIBAgIJAO2zr3Vtc8a6MA0GCSqGSIb3DQEBCwUAMIGFMQswCQYD ... -----END CERTIFICATE-----
-
DER(Distinguished Encoding Rules): DER 是二进制编码格式,通常以
.der
或.cer
为扩展名。DER 格式的证书不可读,因为它们以二进制形式存储。相比于 PEM 格式,DER 格式文件更紧凑,适用于一些资源受限的环境。 -
PKCS#12: PKCS#12(Public-Key Cryptography Standards #12)是一种用于存储证书和私钥的格式,通常以
.p12
或.pfx
为扩展名。PKCS#12 文件通常包含一个或多个证书,以及与之相关联的私钥和可选的证书链。这种格式通常用于导出和传输包含私钥的证书。
这些格式的选择取决于具体的应用场景和系统要求。PEM 格式是最常见的,由于其文本形式,可读性较好,而 DER 格式更适用于二进制传输。 PKCS#12 格式则用于打包证书和私钥,并在一起传输或存储。
使用数字证书进行加密消息的传递
在实际应用中,很多数字证书都属于自签名证书,即证书申请者为自己的证书签名。这类证书通常应用于软件厂商内部发放的产品中,或约定使用该证书的数据交互双方。数字证书完全充当加密算法的载体,为必要数据做加密/解密和签名/验证等操作。
下面以使用数字证书进行加密消息传递为例,介绍证书签发和加密交互操作。
证书签发
数字证书需要经由认证机构签发,其流程如图:
数字证书的颁发流程可简述为如下过程:
1)由数字证书需求方产生自己的密钥对
2)由数字证书需求方将算法、公钥和证书申请者身份信息传送给认证机构。
3)由认证机构核实用户的身份,执行相应必要的步骤,确保请求确实由用户发送而来
4)由认证机构将数字证书颁发给用户
这里的认证机构如果是证书申请者本身,将获得自签名证书。
加密交互
当客户端获得服务器下发的数字证书后,即可使用数字证书进行加密交互:
客户端请求服务器将按如下步骤进行:
1)由客户端使用公钥对数据加密
2)由客户端向服务器端发送加密数据
3)由服务器端使用私钥对数据解密
这与之前讲到的基于非对称加密算法的消息传递模型别无二致。
服务器端完成客户端请求处理后,需经过以下几个步骤完成响应:
1)由服务器端使用私钥对待加密数据签名
2)由服务器端使用私钥对数据加密
3)由服务器向客户端回应加密数据和数字签名
4)由客户端使用公钥对数据解密
5)由客户端使用公钥和解密数据验证签名
数字证书的最佳应用环境是在HTTPS安全协议中,使用流程远比上述加密交互流程复杂,但相关操作封装在传输层,对于应用层透明。
在HTTPS安全协议中使用非对称加密算法交换密钥,使用对称加密算法对数据进行加密/解密操作,提高加密/解密效率。
证书管理
任何机构或个人都可以申请数字证书,并使用由CA机构颁发的数字证书为自己的应用保驾护航。
要获得数字证书,我们需要使用数字证书管理工具 (如KeyToo和OpenSSL) 构建CSR (Certificate Signing Request,数字证书签发申请),交由CA机构签发,形成最终的数字证书。
应用场景
根据相应的活动需要数字证书也分为多种类型,主要包括:
个人数字证书、单位数字证书、单位员工数字证书、服务器数字证书、VPN数字证书、WAP数字证书、代码签名数字证书和表单签名数字证书等。
许多软件公司在自己的软件中嵌入数字证书,可用于验证签名,从而有效地遏制软件的盗版。同时,可以使用数字证书实现加密/解密操作,保护私密数据,进行加密网络交互。
数字证书常常与传输层SSL/TLS协议共同构建应用层HTTPS协议,确保网络交互安全。目前,各大电子商务网站均使用HTTPS协议,确保网络交易安全。各种Web Service为确保数据交互的安全性,通常使用HTTPS协议加强系统安全性。
参考资料
《Java加密与解密艺术》