iOS 中对 HTTPS 证书链验证.docxVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
iOS 中对 HTTPS 证书链的验证这篇文章是我一边学习证书验证一边记录的内容,稍微整理了下,共扯了三部分内容:HTTPS 简要原理;数字证书的内容、生成及验证;iOS 上对证书链的验证。HTTPS 概要HTTPS 是运行在 TLS/SSL 之上的 HTTP,与普通的 HTTP 相比,在数据传输的安全性上有很大的提升。要了解它安全性的巧妙之处,需要先简单地了解对称加密和非对称加密的区别:对称加密只有一个密钥,加密和解密都用这个密钥;非对称加密有公钥和私钥,私钥加密后的内容只有公钥才能解密,公钥加密的内容只有私钥才能解密。为了提高安全性,我们常用的做法是使用对称加密的手段加密数据。可是只使用对称加密的话,双方通信的开始总会以明文的方式传输密钥。那么从一开始这个密钥就泄露了,谈不上什么安全。所以 TLS/SSL 在握手的阶段,结合非对称加密的手段,保证只有通信双方才知道对称加密的密钥。大概的流程如下:TSL:SSL_handshake.png所以,HTTPS 实现传输安全的关键是:在 TLS/SSL 握手阶段保证仅有通信双方得到 Session Key!数字证书的内容X.509 应该是比较流行的 SSL 数字证书标准,包含(但不限于)以下的字段:字段值说明对象名称(Subject Name)用于识别该数字证书的信息共有名称(Common Name)对于客户证书,通常是相应的域名证书颁发者(Issuer Name)发布并签署该证书的实体的信息签名算法(Signature Algorithm)签名所使用的算法序列号(Serial Number)数字证书机构(Certificate Authority, CA)给证书的唯一整数,一个数字证书一个序列号生效期(Not Valid Before)(`?ω?′)失效期(Not Valid After)(╯°口°)╯(┴—┴公钥(Public Key)可公开的密钥签名(Signature)通过签名算法计算证书内容后得到的数据,用于验证证书是否被篡改除了上述所列的字段,还有很多拓展字段,在此不一一详述。下图为 Wikipedia 的公钥证书:wikipedia_cer.png数字证书的生成及验证数字证书的生成是分层级的,下一级的证书需要其上一级证书的私钥签名。所以后者是前者的证书颁发者,也就是说上一级证书的 Subject Name 是其下一级证书的 Issuer Name。在得到证书申请者的一些必要信息(对象名称,公钥私钥)之后,证书颁发者通过 SHA-256 哈希得到证书内容的摘要,再用自己的私钥给这份摘要加密,得到数字签名。综合已有的信息,生成分别包含公钥和私钥的两个证书。扯到这里,就有几个问题:问:如果说发布一个数字证书必须要有上一级证书的私钥加密,那么最顶端的证书——根证书怎么来的?根证书是自签名的,即用自己的私钥签名,不需要其他证书的私钥来生成签名。问:怎么验证证书是有没被篡改?当客户端走 HTTPS 访问站点时,服务器会返回整个证书链。以下图的证书链为例:chain_hierarchy.png要验证?*.?这个证书有没被篡改,就要用到?GlobalSign Organization Validation CA - SHA256 - G2?提供的公钥解密前者的签名得到摘要 Digest1,我们的客户端也计算前者证书的内容得到摘要 Digest2。对比这两个摘要就能知道前者是否被篡改。后者同理,使用?GlobalSign Root CA?提供的公钥验证。当验证到到受信任的根证书时,就能确定?*.?这个证书是可信的。问:为什么上面那个根证书?GlobalSign Root CA?是受信任的?数字证书认证机构(Certificate Authority, CA)签署和管理的?CA 根证书,会被纳入到你的浏览器和操作系统的可信证书列表中,并由这个列表判断根证书是否可信。所以不要随便导入奇奇怪怪的根证书到你的操作系统中。问:生成的数字证书(如?*.)都可用来签署新的证书吗?不一定。如下图,拓展字段里面有个叫 Basic Constraints 的数据结构,里面有个字段叫路径长度约束(Path Length Constraint),表明了该证书能继续签署 CA 子证书的深度,这里为0,说明这个?GlobalSign Organization Validation CA - SHA256 - G2?只能签署客户端证书,而客户端证书不能用于签署新的证书,CA 子证书才能这么做。path_length_constraint.pngiOS 上对证书链的验证在?Overriding TLS Chain Validation Correctly?中提到:When a TLS certificate is v

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档