SSH & Https & Github中的使用 & iOS证书

2019-04-18  本文已影响0人  景天儿

0 First Principle 第一性原理

0-1 SSH是干什么的

用服务器公钥加密自己的登录信息(有对方的公钥,通过自己的用户名密码,可以安全的让对方验证你的身份)

0-2 HTTPS为了解决什么问题

验证对方身份、加密通信内容

0-3 Github,在账号中设置我们自己的公钥干什么

通过git协议,用你的公钥替代登录信息(对方有你的公钥,也可以安全的验证你的身份)

0-4 苹果通过iOS证书,希望做到什么

二次验证:
手机需要知道App的来源、决定是否安装。
服务器知道是谁在提交App、内容有没有被修改。
方式:
手机内置Apple公钥,可以解开证书中的App公钥。App公钥可以解开MachO。这样说明证书、MachoO都没有被篡改过。
提交还不是关键,因为毕竟提交是在登录状态下进行的。

1 SSH的用途

SSH主要用于安全的远程登录

  1. 目的:输入的用户名/密码只希望服务器看到。

  2. 解决:使用服务器的publicKey加密

  3. 问题&解决:防止伪装(即中间人攻击),要对照服务器的公钥(太长,所以都是对照公钥的MD5,对照过程是去官网查看)

1-1 SSH的概念

SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。

OpenSSH是一个开源实现。

1-2 SSH细节

SSH原理与运用(一):远程登录

2 HTTPS

  1. 目的:防止窃听、修改、伪装。(HTTP协议下,Charles、路由器都可以做到)

  2. 解决:彼此确认身份 + 内容加密。

确认身份的方法:签名 + 验证。

签名:用自己的私钥对摘要(如MD5/SHA)加密。

验证:用对方的公钥解密,能解开说明是对方发的,内容不会是被篡改了的。

内容加密:用对方的公钥加密,对方用自己的私钥解密。

3 Github中的使用

github提供两种方式的命令行登录

  1. git@github.com:AFNetworking/AFNetworking.git //必须配置SSH公钥
  2. https://github.com/AFNetworking/AFNetworking.git

第二种在commit代码的时候,都必须配置 邮箱/密码(git的使用,第11条)

第一种方式,自己必须是仓库管理员才可以,设置后,commit/push等就不需要密码了。(需要设置git config --global user.name,不用设置email/password)

这里ssh的原理,是服务器有了你的公钥,就可以验证你的身份了。所以不需要走用户名/密码的验证流程。

4 苹果中的使用

image.png

图片是Hank的图。

4.1 目的:互相确认身份。

  1. 苹果知道是谁提交的App,有没有被修改。(通过开发者本地的密钥对M)//因为有如FastLane等工具可以做提交。

  2. 苹果手机知道App的来源。(通过苹果服务器的密钥对A)

AppStore下载的可以直接安装。

未付款开发者/企业开发者需要用户信任。

付费开发者需要验证是否为测试机

4.2 创建描述文件流程:Mac电脑 <-> 苹果服务器

登录状态下(第一重验证),提交csr文件(包括开发者相关信息、公钥M)。

苹果返回描述文件Provisioning profile.mobileprovision文件),包含了

1. 苹果私钥加密过的`cer`证书文件(包括了`公钥M`)。(经过私钥A处理的Hash,应该只是用于校验的)

2. AppID/测试设备ID/权限文件(`Entitlements`)

4.3 Mac电脑 打包App 流程

4.4 iPhone设备 验证App 流程

4.5 小结

  1. 提交中的文件:

p12文件,用于MachO签名。 -> 该签名用于appstore验证开发者身份,并验证MachO没有被修改。

provisioning profile,用于手机检测要不要安装App,主要是通过cer中的公钥/其他配置文件。

  1. 申请中的文件:

csr文件,用于制作cer证书。

  1. 注意:这里没有涉及开发者对服务器的验证:我怎么知道我提交的是真正的AppStore,因为这个需要自己去保证。

4.6 企业证书

在苹果手机中安装了一个企业证书的公钥,并且在手机中信任。
整个流程中就是,把用Apple公钥解密App的证书,改成了用企业证书解密特定的app。

4.7 越狱后安装盗版app

猜想:越狱应该是,让整个打包和验证过程绕开了Apple公钥,这样整个验证流程就全在自己的掌控中了。

4.8 思考:为什么苹果不把app签名文件用苹果私钥加密(放在描述文件中),这样就不用二次验证了啊?

因为这样不符合单一功能原则。
比如,按现有方案,app更新提交,描述文件无需修改。而如果按照标题中的方案,就需要修改描述文件。

5 Socket与TCP、UDP

5.1 TCP、UDP底层实现都是通过Socket实现的。

主要涉及接口监听(接收数据)、建立socket套接字、发送数据。

5.2 TCP协议中的三次握手和四次握手

TCP协议中的三次握手和四次握手

  1. TCP协议是有连接的双工的通信,即两条连接
  2. 建立连接三次握手
    发起连接A请求 -> 确认连接A请求/发起连接B请求 -> 确认连接请求B
  3. 中断连接四次握手
    发起中断A请求 -> 确认中断A请求、继续发送B的数据 -> B数据发送完成后,发起中断B请求 -> 确认中断B请求。
屏幕快照 2019-05-09 上午10.02.18.png 屏幕快照 2019-05-09 上午10.06.08.png
上一篇下一篇

猜你喜欢

热点阅读