美文网首页
SSH & Https & Github中的使用 & iOS证书

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

作者: 景天儿 | 来源:发表于2019-04-18 19:33 被阅读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 流程

    • 对于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

    相关文章

      网友评论

          本文标题:SSH & Https & Github中的使用 & iOS证书

          本文链接:https://www.haomeiwen.com/subject/xiqxgqtx.html