`
wx1569488408
  • 浏览: 79120 次
文章分类
社区版块
存档分类
最新评论

SSL 与数字证书 - 第四章 - 数字证书

 
阅读更多

目录
第一章    为什么网络是不安全的?
第二章    信息安全的基本概念 
    第一节 安全的定义  
    第二节 认证与授权  
第三章    加密与算法  
    第一节 散列(HASH)  
    第二节 对称加密(SYMMETRIC CRYPTOGRAPHY)  
    第三节    非对称加密(ASYMMETRIC CRYPTOGRAPHY)  
    第四节 数字签名(DIGITAL SIGNATURE)  
第四章    数字证书  
    第一节    数字证书的构成  
    第二节 如何验证数字证书?   
    第三节 数字证书的级联(CERTIFICATE CHAIN)   
第五章    SSL的基本原理   
结束语   

 

第四章    数字证书

上面讲了这么多都是前戏,现在该到主题了。前面提到的认证(Authentication)的时候说,现实生活中可以用身份证和护照来证明身份, 那么在虚拟世界里,数字证书就是身份证。和现实生活不同的是,并不是每个上网的用户都有数字证书的,往往只有当一个人需要证明自己的身份的时候才需要用到数字证书。那么什么时候需要证明自己的身份呢?普通用户一般是不需要的,网站并不关心是谁访问了网站,现在的网站只关心流量啊~反过来,网站就需要证明自己的身份了。比如你想要提交信用卡信息给预定航班的网站,那么你如何确定你正在访问的网站就是你所想要访问的那个呢?现在 钓鱼网站很多的。比如你想访问的是“www.ctrip.com”,但其实你访问的是“www.otrip.com”,所以在提交自己的信息之前你需要验证一下网站的身份,要求网站出示数字证书。一般正常的网站都会主动出示自己的数字证书。由于证书在网页浏览中最为常见,所以我下面举的例子都是基于浏览器的。

第一节    数字证书的构成
我们的身份证是由公安机关颁发的,并加有很多防伪技术,不能伪造(或者说很难)。同样的,数字证书也有专门的发证机关(Certificate Authority,简称CA,其实是一些商业公司啦)。比较常见的发证机关是 VeriSign。数字证书的发证机关会对自己发放的证书加上自己的数字签名,以保证证书不能被伪造。那数字证书到底包含了些什么呢?
1.    持有者姓名(Common Name)
2.    发证机关(Issuer)
3.    有效日期(Validity)
4.    证书持有人的公钥(Subject’s Public Key Info)
5.    扩展信息 (Extension)
6.    用发证机关对该证书的数字签名(Certificate Signature)
基本信息就这些了(这些信息会在后面的章节有所解释),为了更清晰的说明问题,来几张截图:

图1:数字证书的基本内容


图2:数字证书的结构


图3:数字证书详细内容

这几张截图都是我从Firefox里面拷贝出来的,这张证书已经过期了,不过不影响理解。从图2我们可以看到,Certificate(证书)和Signature(签名)是分开的,但其实这个Signature也是证书的一部分。可以这么理解,数字证书包含证书主体和数字签名。证书中的签名是对证书主体的签名。


第二节 如何验证数字证书?
好了,现在我们有了虚拟世界的身份证了,那如何使用呢?和现实生活中检查身份证一样,包含三个步骤:
1.    检查身份证防伪标记
数字证书的防伪标记就是发证机关的私钥加密的那段内容。如何验证?首先我们是默认拥有发证机关的公钥的。如果是浏览器的话,常见的发证机关的公钥是内置的。如下图所示:

图4:Firefox内置的发证机关的数字证书

虽然Firefox内置的是数字证书,但是有数字证书就有公钥,所以是一样的。当浏览器拿到一个数字证书,先看发证机关,然后找到相应的发证机关的证书,获得发证机关的公钥,用此公钥解密被加密的MD5,这样就获得了此证书的MD5值,我们称它为Hash1。然后浏览器用MD5算法对此证书重新计算一遍MD5,获得Hash2。然后比较Hash1和Hash2是否相等。如果相等就证明这张证书是由发证机关颁发的,并且没有被篡改过。回过头去看看上面讲Hash和MD5的部分,你应该能想明白为什么的。


2.    核对相貌
在现实生活中,你的身份证只有一张,你应该好好保管不被别人拿到。但难免钱包丢了,身份证跟着遭殃。所以我们在验证完身份证的真假之后我们要验证持证的人,和身份证上所声明的那个人是不是同一个,我们往往通过比较相貌来辨别。那在虚拟世界又是怎样的呢?你应该已经发现,任何人都可以拥有你的证书就像我们装的Firefox就有很多发证机关的证书。所以核对持有证书人的身份就很重要了。这就要依赖证书里面包含的公钥了。此公钥是这张证书所有者的公钥(注意,我这里指的是所有者,而不是持有者!),我们用此公钥加密一段信息发送给证书的持有者,如果持有者能发送回(可以是被私钥加密,也可以是明文,没有关系)被加密的这段信息的话就证明该持有者拥有该证书对应的私钥,也就是说,该持有者就是该证书的所有者。

3.    核对姓名
最后一步,也是最重要的一步。看清楚了,站在你面前的人的名字和登记在册的名字一样。举个例子,我拿着护照去机场登机,护照和人都没有问题,问题是我根本没有买机票。如果机场工作人员只核对了前面两步的话,我就可以登机了,岂不是很荒谬?同样的,在虚拟世界,比如那个“ctrip”的例子,你拿到了一个证书,并且验证没有问题,但是证书上的Common Name明明写的是“otrip”,你还继续吗?

如果这三个步骤都没有问题,你就可以确信正在和你通信的对方是可以信任的,是你想要联系的那个人。

第三节 数字证书的级联(Certificate Chain)
根据上述讨论,我们可以知道,所有数字证书都是基于另外一张默认为可信任(浏览器内置)的数字证书的。也就是说,我们必须用一张已知合法的数字证书去验证另外一张未知的数字证书。第二节提到的发证机关的数字证书就是默认为可信任的。事实上,发证机关的证书是自己签发给自己的,验证没有意义。因为这些证书是人工配置在我们电脑上的,所以默认为安全的。这些证书称为“根证书”。

由于申请证书的人数众多,发证机关忙不过来,需要一些代理来帮忙签发证书,有可能代理也需要代理来帮忙。这样就产生了证书的层级关系,如下图所示:

图5:级联的数字证书

这里的“www.paypal.com”是由二级代理“VeriSign Class 3 Extended Validation SSL SGC CA”签发的,而二级代理的证书又是由一级代理“VeriSign Class 3 Public Primary Certification Authority – G5”签发的,而一级代理的证书是由根证书机关“Buildin Object Token: Verisign Class 3 Public Primary Certification Authority”签发的。不必太关注这里的名字,名字而已,重要的是他们各自的位置。在验证这张证书的时候需要从下往上递归验证。先验证用户证书(最下面的证书,这里就是“www.paypal.com”),如果这样证书在浏览器的可信任列表里面那么验证到此结束,如果不是的话就要检查证书的防伪标记,这需要用到二级代理的证书,同样的,如果二级代理的证书在可信任列表里面,那么直接使用,否则就要检查二级代理证书的防伪标记,这需要用到一级代理的证书……直到根证书为止,如果根证书不在可信任列表里面,那么这张证书就没法验证了。这个过程的简单流程图是这样的:


图6:级联证书的验证流程

需要注意的是,这是一个递归过程,所以这里的返回只是返回到上层递归。对于我们这个例子中的级联证书的验证可能是这样的:


图7:级联证书验证流程示例

这个过程看起来没有什么问题。但是仔细一想,发现有一个大问题。任何一个拥有合法证书的人都可以给别人签发证书了,不就是在这个继承关系上面多加一层吗?黄粱大梦!事情没那么简单啦~能够签发证书的叫CA,不管是否是代理,它都是CA,只有CA的证书才能拥有下级,那如何判断一张证书是否是CA呢?还记得我们在第一节讲过的证书中包含的扩展信息吗?这里可以放很多东西,包括这张证书的合法用途,如下图所示:




图8:证书的扩展信息

这里我们很清楚的可以看到用户证书是不能作为CA来用的,白纸黑字写着“Is not a Certificate Authority”。而CA的证书也有不同的权限。“Maximum number of intermediate CAs”说明了这个CA的权限大小。如果这个数字是0(比如这里的二级代理的证书),说明这个CA只能签发用户证书,而不能再授权其他机构为CA。如果这个数字是1,说明这个CA可以再授权一层代理,以此类推。图中没有显示根证书的Extension,因为根证书没有Extension,没有表示没有限制。在验证级联证书的时候,浏览器会检查证书的Extension,如果某个证书超范围使用了,浏览器会发出警告的。级联证书为证书的签发带来了很大的方便和灵活性。事实上我们可以看到,任何一张用户证书都应该是级联的,至少拥有一个上级证书(根证书)。所以在我们前面的例子中的“ebiz.isir.cmu.edu”这张证书是很奇怪的,不是标准的证书。这张证书是无法验证的,只在学校内部网上使用,默认接收就行了(浏览器会把它当成根证书来处理)。


关于数字证书,我还有几点想要提一下:
1.    数字证书本身不加密,加密的是数字证书的hash。数字证书加密了就很麻烦了,如何获知发证机关呢?不知道发证机关就不知道解密的公钥啊!还有,明文的数字证书可以显示数字证书的信息,即使不能验证数字证书的真伪,但是给了人为判断一个机会。
2.    数字证书中的公钥可以是自己指定的,也可以是发证机关生成的。不同的发证机关可能有不同的要求。
3.    申请证书的过程是安全的。如果申请证书的过程都不安全的话,后面的一切都免谈了。现实生活中,申请数字证书往往要求邮寄,或者电话,传真,甚至当面申请的。

转载于:https://my.oschina.net/zhlmmc/blog/42111

分享到:
评论

相关推荐

    SSL安全证书-概念解析1

    一、数字证书与SSL安全 数字证书是一种认证机制,它代表了一个权威机构颁发的安全标识。在HTTP协议的早期,网络通信数据以明文形式传输,容易导致隐私泄露。为了解决这一问题,非对称加密(如RSA)和签名算法被引入...

    实训5:配置数字证书服务.docx

    在 DC 上部署企业根 CA 是配置数字证书服务的第一步。具体操作步骤如下: 1. 打开“服务器管理器”,单击“添加角色和功能”,然后选择“Active Directory 证书服务”角色。 2. 在“AD CS 角色服务”界面中,勾选...

    Keytool与数字证书

    ### Keytool与数字证书 #### 一、Keytool简介及基本操作 **Keytool** 是 Java 开发工具包(JDK)中的一个实用程序,用于管理密钥库(key stores),其中包括私钥(private keys)及其对应的公钥证书(public key ...

    公钥私钥加密解密数字证书数字签名详解.docx

    ### 公钥私钥加密解密、数字证书与数字签名详解 #### 一、基础知识概述 在探讨公钥私钥加密解密、数字证书以及数字签名之前,我们需要先理解几个核心概念。 **1. 密钥对:** - 在非对称加密技术中,存在两种密钥...

    数字证书的使用

    #### 三、数字证书服务器的安装与配置 ##### 1. 安装独立根CA服务器 - **步骤一:添加证书服务** - 打开“控制面板” -> “添加或删除程序” -> “Windows组件向导”,选择“证书服务”进行安装。 - 在安装过程中...

    Openssl与数字证书

    ### Openssl与数字证书 #### 一、加密算法概述 **加密算法**是信息安全领域中的关键技术之一,主要用于保护数据在传输过程中的安全性和完整性。按照密钥的不同,加密算法主要可以分为两大类:**对称加密**和**非...

    java获取数字证书信息

    在本篇文章中,我们将深入探讨如何使用Java来获取数字证书的信息,包括使用TOMCAT和JDK搭建SSL服务的过程、如何用OpenSSL签发证书以及如何支持第三方CA等内容。 #### 一、使用TOMCAT和JDK搭建SSL服务 ##### 1. ...

    本地数字签名证书SSL

    在生成测试版本的HTTPS SSL数字证书时,我们需要了解以下关键步骤和知识点: 1. **证书结构**:一个SSL证书通常包含发行者的身份、拥有者的身份信息(通常是网站域名)、公钥以及证书的有效期等信息。这些信息经过...

    Wiley - SSL and TLS esssentials- Securing the Web

    - **服务器认证**:服务器向客户端发送数字证书,证书包含服务器的公钥,客户端验证证书的有效性。 - **密钥交换**:双方协商出一个共享密钥,该过程通常基于Diffie-Hellman算法。 - **客户端认证**:在某些场景...

    GlobalSign ssl 证书安装配置指南-Apache1

    GlobalSign作为知名的数字证书颁发机构,提供了详尽的SSL证书安装配置流程,以下是具体的步骤解析: ### 第一步:生成证书请求文件(CSR) 生成CSR(Certificate Signing Request)是SSL证书申请的第一步。在OpenSSL...

    ssl.ca-0.1.tar.gz

    在提到“ssl.ca-0.1.tar.gz”时,我们可能正在讨论一个与SSL/TLS相关的证书或者配置文件的归档。 首先,让我们分解一下这个文件名:“ssl”代表SSL,表明这是与SSL/TLS安全相关的;“ca”通常指的是Certificate ...

    IOS RAS 数字证书Demo

    4. **PKI基础设施**:Public Key Infrastructure(公钥基础设施)是支持数字证书的整个系统,包括CA、注册机构(RA)、证书撤销列表(CRL)等。了解PKI的工作原理对于理解Demo中的证书验证过程至关重要。 5. **安全...

    dubbo开启TLS(ssl)源码

    启用TLS需要服务器和客户端之间有公钥和私钥的交换,这通常通过数字证书来实现。你可以使用OpenSSL工具生成证书,例如: ``` openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes ...

    HNXACA单位个人数字证书登记申请表.pdf

    标题《HNXACA单位个人数字证书登记申请表.pdf》和描述《HNXACA单位个人数字证书登记申请表.pdf》提到的是一个有关数字证书的申请表格文档。由于提供的内容片段难以提供确切信息,我将基于数字证书相关的通用知识点...

    微软数字证书操作API函数使用

    数字证书是一种电子文档,由受信任的第三方机构(称为证书颁发机构,CA)签发,它包含公钥的所有者的信息以及公钥本身。在网络安全中,数字证书用于验证服务器的身份,确保用户与正确的服务器进行通信,并且可以用于...

    Java 数字签名、数字证书生成源码.7z

    Java 数字签名与数字证书是网络安全领域中的重要概念,它们在确保数据的完整性和来源的可信性方面扮演着关键角色。在这个"Java 数字签名、数字证书生成源码"压缩包中,包含了实现这些功能的源代码,对于理解Java安全...

    可运营的SSL证书在线生成系统源码,附带图文搭建教程

    SSL(Secure Sockets Layer)证书是基于公钥基础设施(PKI)的一种数字证书,由受信任的证书颁发机构(CA)验证网站身份后签发。它包含网站所有者的身份信息,并通过公钥和私钥对进行加密,保障用户在浏览网站时的...

    domino使用数字证书

    ### Domino使用数字证书知识点 #### 一、概述 数字证书是一种用于在线环境中验证实体身份的电子凭证,类似于现实生活中的身份证。在互联网上进行各种交易时,数字证书可以帮助确保参与方的真实性和安全性。数字...

    数字证书在网络安全中的应用分析.pdf

    4. **安全电子邮件**:通过数字证书,邮件可以被加密,防止在传输过程中被窃取,同时数字签名保证邮件未被篡改。 5. **代码签名保护**:软件开发者使用数字证书对代码签名,表明软件来源的合法性,用户可以信任并...

Global site tag (gtag.js) - Google Analytics