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

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 流程

  • 对于Distribute版本的App,会用客户端私钥(p12文件),对MachO文件(可执行二进制文件)签名,防止修改。
    a. 签名的过程:首先对APP进行一次SHA256加密,获得APP的HASH值,在用私钥M 对HASH值进行加密就生成了一个APP签名
    b. 因为签名必须有私钥(p12文件),所以如果希望在其他电脑上进行签名,就必须把p12文件传到那台电脑
  • 对于Distribute/Develop版本的App,都会有MachO/描述文件

4.4 iPhone设备 验证App 流程

  • 对于Develop版本的App,会验证测试设备ID
  • 对于Distribute版本的App,iPhone会用公钥A解密描述文件中的公钥M(同时验证了证书是由私钥A签名的),然后用公钥M校验MachO(验证证书是由私钥M签名的)。
  • 此外,当使用企业证书/未付费个人证书安装App时,会要求用户信任一个证书,这个证书的作用等同于密钥对A(但就不是AppStore认证的了,但也是苹果服务器的密钥对)。

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容