首页 > 代码库 > (二)数字证书和数字时间戳
(二)数字证书和数字时间戳
一、证书
- 概要
证书是一个【经证书认证中心数字签名的】包含【公开密钥拥有者信息以及公开密钥的文件】。证书格式及证书内容遵循X.509标准。
从证书的用途来看,数字证书分为签名证书和加密证书。
a) 签名证书主要用于对用户信息进行签名,以保证信息的不可否认性(身份认证);
b) 加密证书主要用于对用户传送信息进行加密,以保证信息的真实性和完整性(传输加密)。
目前最安全的数字证书是由第三方 CA 机构(比如 GlobalSign)认证的数字证书,数字证书保存在【经国家密码管理局技术认可的证书存储介质】中,用户使用时需要插入证书存储介质并输入介质保护码,进行双因子验证;在使用过程中需要验证证书是否存在并有效,进行签名/验证、加密/解密等操作都是在【介质内】进行运算,密钥文件不会被调出介质;使用完拔下证书存储介质,介质内的文件不会被保存在电脑上,因此用户不必担心被黑客控制或盗用。正是因为安全数字证书存储介质【不可观察、不可复制】的特点使得木马无法仿造,有效保障数字证书。(eg:木马病毒只能盗用“软证书”,对“硬证书”却束手无策。因此,“Usbkey +数字证书”,也就是硬证书。USB Token是以USB为接口的存储设备,它可以很安全的存储证书的私钥,并可以防止私钥导出,还可以设置保护口令,安全级别非常高。----但是速度慢)
证书的主要好处之一是主机不必再为单个使用者维护一套密码,这些单个使用者进行访问的先决条件是需要通过身份验证。相反,主机只需在证书颁发者中建立信任。
通常,证书包含以下信息:
a) 使用者的公钥值。(通过证书公布公钥,所以证书必须由可信任的权威机构颁发)
b) 使用者标识信息(如名称和电子邮件地址)。
c) 有效期(证书的有效时间)。
d) 颁发者标识信息。
e) 颁发者的数字签名(证书本身就是一个数字签名,但是你的计算机保留了第三方权威证书颁发机构的公钥)
另外信息:指纹以及指纹算法
为了保证安全、证书完整性等,在证书的发布机构发布证书时,证书的指纹和指纹算法(指纹算法(一个hash算法)计算整个证书的hash值(指纹)),都会加密后再和证书放到一起发布,以防有人修改指纹后伪造相应的数字证书。这里问题又来了,证书的指纹和指纹算法用什么加密呢?他们是用证书发布机构的私钥进行加密的。可以用证书发布机构的公钥对指纹和指纹算法解密,也就是说证书发布机构除了给别人发布证书外,他自己本身也有自己的证书。证书发布机构的证书是哪里来的呢???这个证书发布机构的数字证书(一般由他自己生成)在我们的操作系统刚安装好时(例如windows xp等操作系统),这些证书发布机构的数字证书就已经被微软(或者其它操作系统的开发机构)安装在操作系统中了,微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构,把这些证书发布机构的证书默认就安装在操作系统里面了,并且设置为操作系统信任的数字证书。这些证书发布机构自己持有与他自己的数字证书对应的私钥,他会用这个私钥加密所有他发布的证书的指纹作为数字签名。
EG:
我们"ABC Company"申请到这个证书后,我们把证书投入使用,我们在通信过程开始时会把证书发给对方,对方如何检查这个证书的确是合法的并且是我们"ABC Company"公司的证书呢?首先应用程序(对方通信用的程序,例如IE、OUTLook等)读取证书中的Issuer(发布机构)为"SecureTrust CA" ,然后会在操作系统中受信任的发布机构的证书中去找"SecureTrust CA"的证书,如果找不到,那说明证书的发布机构是个水货发布机构,证书可能有问题,程序会给出一个错误信息。如果在系统中找到了"SecureTrust CA"的证书,那么应用程序就会从证书中取出"SecureTrust CA"的公钥,然后对我们"ABC Company"公司的证书里面的指纹和指纹算法用这个公钥进行解密,然后使用这个指纹算法计算"ABC Company"证书的指纹,将这个计算的指纹与放在证书中的指纹对比,如果一致,说明"ABC Company"的证书肯定没有被修改过并且证书是"SecureTrust CA" 发布的,证书中的公钥肯定是"ABC Company"的。对方然后就可以放心的使用这个公钥和我们"ABC Company"进行通信了。
- certmgr.msc
“开始”——“运行”——输入certmgr.msc ,“证书”管理单元是用户和管理员查看和管理用户、计算机或服务的证书的主要工具。用户使用“证书”管理单元可以申请、续订、查找、查看、移动、复制和删除证书。
另外:
a) 打开IE浏览器,工具——IE选项——内容——证书
或者“开始”——“运行”——输入certmgr
b) 使用MMC管理 (Microsoft Management Console)
- SSL证书文件格式------ SSL(Secure Sockets Layer 安全套接层)
1) 个人信息交换 (PKCS #12) ----Public Key Cryptography Standards
后缀:*.p12,*.pfx
特点:此类后缀证书是唯一可用于导出证书及其私钥的文件格式。
个人信息交换格式(PFX,也称为 PKCS #12)支持安全存储证书、私钥和证书路径中的所有证书。
如果要【导出】私钥(pfx)是需要输入密码的,这个密码就是对私钥再次加密,这样就保证了私钥的安全,别人即使拿到了你的证书备份(pfx)不知道加密私钥的密码,也是无法导入证书的。相反,如果只是导入导出cer格式的证书,是不会提示你输入密码的。因为公钥一般来说是对外公开的,不用加密。
2) 加密消息语法标准 (PKCS #7)
后缀:*.p7b,*.p7c,*.spc
特点:一般是证书链,里面包括1到多个证书。
3) DER 编码的二进制 X.509
后缀:*.DER,*.CER,*.CRT
特点:DER 编码二进制格式支持存储单个证书。该格式不支持存储私钥或证书路径。
4) Base64 编码的 X.509
后缀:*.PEM,*.CER,*.CRT
特点Base64 格式支持存储单个证书。该格式不支持存储私钥或证书路径。
注意:PKCS #12、PKCS #7、Microsoft序列化证书存储(*.SST)这些格式可以在一个文件中存储一个以上证书。
- 如何自己创建证书
每个证书发布机构都有自己的用来创建证书的工具,对于我们学习可以使用微软提供的创建证书工具makecert.exe。
注意,由微软的工具生成的证书,严格来说它没什么发布机构,所以微软虚拟了一个叫做"Root Agency"的发布机构,默认情况下,windows里面安装了这个所谓的证书发布机构的证书,但是这证书默认情况下不是受信任的,原因很简单,这样做大家都可以用makecert来制作合法的数字证书了。
- 其它问题:
【问题1】
在检查完证书后,“客户”发送一个随机的字符串给“服务器”去用私钥加密,以便判断对方是否真的持有私钥。但是有一个问题,“黑客”也可以发送一个字符串给“服务器”去加密并且得到加密后的内容,这样对于“服务器”来说是不安全的,因为黑客可以发送一些简单的有规律的字符串给“服务器”加密,从而寻找加密的规律,有可能威胁到私钥的安全。所以说,“服务器”随随便便用私钥去加密一个来路不明的字符串并把结果发送给对方是不安全的。
〖解决方法〗
每次收到“客户”发来的要加密的的字符串时,“服务器”并不是真正的加密这个字符串本身,而是把这个字符串进行一个hash计算,加密这个字符串的hash值(不加密原来的字符串)后发送给“客户”,“客户”收到后解密这个hash值并自己计算字符串的hash值然后进行对比是否一致。也就是说,“服务器”不直接加密收到的字符串,而是加密这个字符串的一个hash值,这样就避免了加密那些有规律的字符串,从而降低被破解的机率。“客户”自己发送的字符串,因此它自己可以计算字符串的hash值,然后再把“服务器”发送过来的加密的hash值和自己计算的进行对比,同样也能确定对方是否是“服务器”。
HASH值不可逆!(单向算法一般只用于验证性的事务处理,例如,在客户端HASH加密后的数据传到服务器后也是只对比其记录的HASH码,不会对明文进行比对的)
【问题2】
在双方的通信过程中,“黑客”可以截获发送的加密了的内容,虽然他无法解密这个内容,但是他可以捣乱,例如把信息原封不动的发送多次,扰乱通信过程。
〖解决方法〗
可以给通信的内容加上一个序号或者一个随机的值,如果“客户”或者“服务器”接收到的信息中有之前出现过的序号或者随机值,那么说明有人在通信过程中重发信息内容进行捣乱,双方会立刻停止通信。有人可能会问,如果有人一直这么捣乱怎么办?那不是无法通信了?答案是的确是这样的,例如有人控制了你连接互联网的路由器,他的确可以针对你。但是一些重要的应用,例如军队或者政府的内部网络,它们都不使用我们平时使用的公网,因此一般人不会破坏到他们的通信。
二、数字时间戳(digital time-stamp)
- 概要
随着国内的信息化进程的深入和互联网的迅速发展,我国的信息化进入高速发展阶段。电子政务和电子商务中的行政文件、书面合同等电子化文件逐步发挥了它们更大的作用。此类文件中的内容、人物和时间是整个事务的核心组成部分,如何保证以上信息的安全已经成为电子政务和电子商务活动中的重点。
目前,在电子政务和电子商务中,为了解决保密性、完整性、防抵赖等信息安全问题,已经开始启用个人数字证书。在信息交换的过程中,通过数字签名能够保证内容和签发人的不可抵赖性,但仍缺少对时间因素的防抵赖。
数字时间戳服务(DTS)由专门的机构提供。是针对电子政务、电子商务、数字医疗、知识产权保护、文化创意、司法等领域,提供精确,安全,不可抵赖的时间戳认证服务。
时间戳(time-stamp)是一个经加密后形成的凭证文档,它包括三个部分:
1) 需加时间戳的文件的摘要(digest);
2) DTS收到文件的日期和时间
3) DTS的数字签名
- 时间戳的过程
1) 用户对文件数据进行Hash摘要处理
2) 用户提出时间戳请求,Hash值被传递给时间戳服务器
3) 时间戳服务器对哈希值和一个日期/时间记录进行签名,生成时间戳
4) 时间戳数据和文件信息绑定后返还,用户进行下一步电子交易操作。
注意:书面签署文件的时间是由签署人自己写上的,而数字时间戳则不然,它是由认证单位DTS来加的,以DTS收到文件的时间为依据。因此,时间戳也可作为科学家的科学发明文献的时间认证。
三、数字证书申请相关链接
Verisign公司 http://www.verisign.com/
天威诚信 http://www.itrus.com.cn/
GlobalSign http://cn.globalsign.com/
不受信任的证书发布机构的危害
为什么一个证书发布机构受不受信任这么重要?我们举个例子。假设我们开了一个狗屁公司来为别人发布证书,并且我和微软有一腿,微软在他们的操作系统中把我设置为了受信任的证书发布机构。现在如果有个小公司叫Wicrosoft 花了10块钱让我为他们公司申请了一个证书,并且公司慢慢壮大,证书的应用范围也越来越广。然后有个奸商的公司JS Company想冒充Wicrosoft,于是给了我¥10000,让我为他们颁布一个证书,但是证书的名字(Subject)要写Wicrosoft,假如我为了这¥10000,真的把证书给了他们,那么他们以后就可以使用这个证书来冒充Wicrosoft了。
如果是一个优秀的证书发布机构,比如你要向他申请一个名字叫Wicrosoft的证书,它会让你提供很多资料证明你确实可以代表Wicrosoft这个公司,也就是说他回去核实你的身份。证书发布机构是要为他发布出的证书负法律责任的。
四、应用
- 钓鱼网站,通过 SSL 服务器证书进行有效防范
网络钓鱼是一种网络欺诈行为,不法分子利用各种手段,仿冒真实网站的网页地址以及页面内容,以此来骗取用户银行或信用卡账号、密码等私人资料。(EG:虚假购物、彩票预测、假药网站、虚假招聘、仿冒登录页面等)
SSL 数字证书即服务器证书,只有安装了 SSL 证书的网站,才标志着该网站经过了真实的可靠身份验证,并经过了 SSL技术对数据传输的加密,进而防止个人信息被黑客窃取。只有用户确切了解了网站的真实身份,且信息的传递不会被任何人中途截取或破解,他们才会向网站传送帐号、密码或其它个人敏感信息。
如何分辨网站是否安装有 SSL 数字证书呢?通常情况下,安装了 SSL 数字证书的网站可以通过“https”开头的网址进行访问,并会在地址栏处显示锁型标志(点击锁型标志,即可显示网站安装的证书详情,里面标示了网站拥有者的身份、颁证机构、证书的有效时间等信息),意味着该网站进行了 SSL 加密并进行了严格的真实身份验证。
如果网站部署了 EVSSL 证书,则通过"https"访问时,会使浏览器地址栏变成绿色,标识着该网站经过了最高级别的 SSL证书加密并获得最严格的身份验证,让网民一眼辨识到该网站是可信网站。
相关链接:
妥善保管代码签名证书私钥,防止数字签名被恶意软件盗用
EVSSL 数字证书比传统 SSL 证书更安全、更直观,让用户更安心地进行线上交易
SSL 服务器证书的技术原理、颁发过程及主要功能
SSL 数字证书的主要类型及特点
SSL 数字证书的作用
数字证书的类型
正确选择服务器证书
资料参考:
数字证书原理
GlobalSign数字证书认证中心
作者:滴答的雨
出处:http://www.cnblogs.com/heyuquan/
(二)数字证书和数字时间戳