[iOS笔记] 网络通信安全与证书

非对称加密算法 RSA

介绍

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。

算法原理:

https://zh.wikipedia.org/wiki/RSA加密演算法

流程

  • 消息发送方A在本地构建密钥对,公钥和私钥;

  • 消息发送方A将产生的公钥发送给消息接收方B;

  • B向A发送数据时,通过公钥进行加密,A接收到数据后通过私钥进行解密,完成一次通信;

  • 反之,A向B发送数据时,通过私钥对数据进行加密,B接收到数据后通过公钥进行解密。

DH密钥交换算法

介绍

1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。

DH算法是一种密钥协商算法,只用于密钥的分配,不用于消息的加解密。

它提供了一种安全的交换密钥的方式,通过交换的密钥进行数据的加解密。

通信流程

  • 首先A、B双方,在通信前构建专属于自己的密钥对,假设分别是公钥A,私钥A,公钥B,私钥B;

  • A将自己的公钥A暴露给B,B通过私钥B和公钥A经过一定的运算产生出本地的密钥B;

  • 同样,B将自己的公钥B暴露给A,A通过私钥A和公钥B经过一定的运算产生出本地的密钥A;

  • 最后,这个算法有意思的一点就是,密钥A和密钥B是一致的,这样A、B双方就拥有了一个属于双方的“秘密”口令;

资料

http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

http://www.ruanyifeng.com/blog/2011/02/seven_myths_about_https.html

HTTPS

HTTP的风险

  • 窃听风险:第三方可以获知通信内容。
  • 冒充风险:第三方可以冒充他人身份参与通信。
  • 篡改风险:第三方可以修改通信内容。

SSL/TLS

介绍

安全套接字(Secure Socket Layer,SSL)

安全传输层协议 (Transport Layer Security Protocol, TLS)

介于应用层和TCP层之间

特性

  • 保密: 所有信息都是加密传播,第三方无法窃听
  • 鉴别: 配备身份证书,防止身份被冒充。
  • 完整性: 具有校验机制,一旦被篡改,通信双方会立刻发现。

密码套件格式: SSL_DHE_RSA_WITH_DES_CBC_SHA

工作原理

协议
  • 握手协议(Handshake protocol)
  • 记录协议(Record protocol)
  • 警报协议(Alert protocol)

解决的问题

  • 如何保证公钥不被篡改?

    将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。

  • 公钥加密计算量太大,如何减少耗用的时间?

    "对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。

对称和非对称加密的应用:Secure Shell (SSH 安全壳协议)

介绍

专为远程登录会话和其他网络服务提供安全性的协议

一般我们现在用的是OpenSSH框架

OSI的7层:
7 应用层  HTTP FTP
6 表示层 
5 会话层  SSH
4 传输层  TCP UDP
3 网络层  IP
2 数据链路层 
1 物理层

主要协议

  • 传输层协议(The Transport Layer Protocol)
  • 用户认证协议(The User Authentication Protocol)
  • 连接协议(The Connection Protocol)

SSH提供两种认证方式:

password认证:

客户端向服务器发出 password认证请求,将用户名和密码加密后发送给服务器;

服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败的消息。

publickey 认证:

采用数字签名的方法来认证客户端。目前,设备上可以利用RSA和 DSA两种公共密钥算法实现数字签名。

客户端发送包含用户名、公共密钥和公共密钥算法的 publickey 认证请求给服务器端。

服务器对公钥进行合法性检查,如果不合法,则直接发送失败消息;否则,服务器利用数字签名对客户端进行认证,并返回认证成功或失败的消息

通信流程
  • 首先服务端会通过非对称加密,产生一个公钥和私钥;

  • 在客户端发起请求时,服务端将公钥暴露给客户端,这个公钥可以被任意暴露;

  • 客户端在获取公钥后,会先产生一个由256位随机数字组成的会话密钥,这里称为口令;

  • 客户端通过公钥将这个口令加密,发送给服务器端;

  • 服务器端通过私钥进行解密,获取到通讯口令;

  • 之后,客户端和服务端的信息传递,都通过这个口令进行对称的加密。 //对称加密

资料

http://www.cnblogs.com/zmlctt/p/3946860.html

证书 certificate

介绍

证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。

证书的内容包括:

  • 电子签证机关的信息
  • 公钥用户信息
  • 公钥
  • 权威机构的签字
  • 有效期
  • ...

证书中心 (certificate authority,简称CA)

受信任的根证书颁发机构, 如: 微软, Apple

证书中心用自己的私钥,对颁发的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)

证书链

Web 浏览器已预先配置了一组浏览器自动信任的根 CA 证书。
来自其他证书授权机构的所有证书都必须附带证书链,以检验这些证书的有效性。
证书链是由一系列 CA 证书发出的证书序列,最终以根 CA 证书结束。

根证书

CA用自己的私钥为公钥签名,用于验证自己的公钥

根证书是一份特殊的证书,它的签发者是它本身,下载根证书就表明对该根证书以下所签发的证书都表示信任

证书请求过程

  1. 生成非对称加密的公钥和私钥
  2. 生成证书请求文件 (csr: CertificateSigningRequest),其中包含公钥和与用户信息
  3. 在 CA 网站上传CSR文件
  4. CA 使用其 private key 对 CSR 中的 public key 和身份信息进行加密签名生成数字证书(Digital Certificate)并保存
  5. 从 CA 网站下载证书并安装

数字签名

数位签名不是指将签名扫描成数字图像,或者用触摸板获取的签名,更不是落款。

将数据按约定的HASH算法计算得到一个固定位数的摘要并用私钥加密

image

证书和签名的应用

image

证书在iOS开发中的应用

  • development

    • iOS App development

    • Apple Push Notification service SSL(Sandbox)

  • Production

    • App Store and Ad Hoc

    • Apple Push Notification service SSL(Sandbox & Production)

    • Pass Type ID Certificate

Provisioning Profiles

包含:
  • APP ID
  • 证书
  • Device UUID

作用

资料

https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html

https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40012582-CH1-SW1

http://blog.csdn.net/holydancer/article/details/9219333

image

posted @ 2016-08-09 20:27  skyko  阅读(932)  评论(0编辑  收藏  举报