分享

数字证书

 icecity1306 2015-09-21

上一篇博客讲到了RSA加密算法,这里就写一下RSA应用最广泛的-数字证书。数字证书的作用就是在数据传输的过程中证明用户的身份,保证用户不是伪装的。

为什么需要数字证书

假设一个正常的非对称加密通信如下:

1

现在假设有个黑客Sam获取了Cass的公钥,并伪装成Dean, 是完全可能的。那么就需要一种验证用户身份的机制,那就是数字证书。

数字证书标准

1、X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。目前的版本是3。

2、证书持有人的公钥:包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数。

3、证书的序列号:由CA给予每一个证书分配的唯一的数字型编号,当证书被取消时,实际上是将此证书序列号放入由CA签发的CRL(Certificate Revocation List证书作废表,或证书黑名单表)中。这也是序列号唯一的原因。

4、主题信息:证书持有人唯一的标识符(或称DN-distinguished name)这个名字在 Internet上应该是唯一的。DN由许多部分组成,看起来象这样:

CN=Bob Allen, OU=Total Network Security Division

O=Network Associates, Inc.

C=US

这些信息指出该科目的通用名、组织单位、组织和国家或者证书持有人的姓名、服务处所等信息。

5、证书的有效期:证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效。

6、认证机构:证书发布者,是签发该证书的实体唯一的CA的X.500名字。使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书)

7、发布者的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过。

8、签名算法标识符:用来指定CA签署证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法。

下面是截取了github的ssl证书的截图:

2 3 4

数字证书的颁发过程

先上个图吧: 5

图中给出了基本的证书申请流程,这个流程一般体现的场景如:网页服务器从CA请求SSL证书用于https加密; 像苹果服务器请求开发者证书。

CA与系统根证书

可能大家经常要听到CA这个词,那什么是CA呢,CA就是上图中的证书颁发机构,因为证书颁发机构关系到所有互联网通信的身份安全,因此一定要是一个非常权威的机构。所以这样的专门管理和颁发证书的机构就是CA机构。

CA证书可以具有层级结构,CA建立自上而下的信任链,下级CA信任上级CA,下级CA由上级CA颁发证书并认证。 如:6

如果说CA保证互联网交易安全的根本保证,那么系统根证书就是个人PC安全的根本保证。系统根证书里保存了受信任的CA证书的根证书,用户验证一个数字证书的正确性都是从系统根证书开始的。

如上图中: google.com.hk的ssl证书由 Google Internet Authority G2这个CA来验证。而Google Internet Authority G2由 GeoTrust Global CA来验证; GeoTrust Global CA由系统根证书Equifax Secure Certificate Authority来验证。

如何查看系统根证书 在mac系统的keychain中直接就可以查看了,在windows系统中在开始的搜索中直接键入:certmgr.msc,就可以打开证书查看器 如果系统根证书被篡改,系统的安全性就受到威胁

所以,不要轻易的信任根证书,除非你是开发者,了解自己的所作所为

HTTPS加密过程

话不多说,先上一幅图:

7

由上可以看出https协议是很安全的,谷歌公司已经大力推广HTTPS的使用。

但是前提是不要轻易信任不明发布源的数字证书,不要改动系统根证书。在ASIHttpRequest中提供了一个属性:validatesSecureCertificate,当设置其位NO时,可以忽略对数字证书进行有效性验证。这样做是不安全的,因此建议我们平时在测试时可以将其设置为NO,但发布时最好还是设置为YES.

下面即将讲到一种监察的情况。

为什么Fiddler可以抓https的数据包

如果你使用过Fiddler进行过网络抓包调试,应该发现Fiddler是可以抓取https网络请求的数据包的,以前我也有过疑惑,如果https这么容易就被Fiddler这样的工具截取到数据,那么还有什么安全性可言呢,还要https协议干嘛呢。但其实不然,https还是很安全的。下面就解释下为何Fiddler可以抓https的包。

Fiddler对服务端充当客户端,对客户端充当服务端,并颁发证书给不同的domain 8

但是Fidder不是正规的CA证书,它颁发的证书不受浏览器信任的,所以如果你的网络正被Fiddler这样的Middle Men监控着,那么https接请求都会报证书不受信任的,像这样: 9。但是如果代码中忽略了https中ssl证书合法性的验证,那么https的安全性就相当于没有了。所以不要把ASIHttpRequest中的validatesSecureCertificate属性单纯的设置为NO.

这篇博客先到这里吧。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多