V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xoxo419
V2EX  ›  问与答

docker 的这段代码有什么用的?

  •  
  •   xoxo419 · 2017-11-07 16:08:02 +08:00 · 2996 次点击
    这是一个创建于 2361 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ENV GPG_KEYS 0B96609E270F565C13292B24C13C70B87267B52D 0A95E9A026542D53835E3F3A7DEC4E69FC9C83D7 0E604491
    RUN set -xe \
      && for key in $GPG_KEYS; do \
        gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
      done
    
    第 1 条附言  ·  2017-11-08 09:34:27 +08:00

    对于GPG做了简单的总结 blog-PHP中GPG作用

    9 条回复    2017-11-08 08:52:27 +08:00
    hljjhb
        1
    hljjhb  
       2017-11-07 18:14:05 +08:00 via Android
    导入 gpg 公钥
    xoxo419
        2
    xoxo419  
    OP
       2017-11-07 21:25:16 +08:00
    @hljjhb 这个公钥是从哪里获取的呢?
    hljjhb
        3
    hljjhb  
       2017-11-07 21:31:24 +08:00 via Android
    @xoxo419 参数里的 keyserver
    cy97cool
        4
    cy97cool  
       2017-11-07 21:31:42 +08:00 via Android
    @xoxo419 你可以去了解 gpg 和 openpgp,用来做安全地加密、签名验证

    公钥服务器就在命令里面 ha.pool.sks-keyservers.net
    xoxo419
        5
    xoxo419  
    OP
       2017-11-07 21:58:44 +08:00
    @hljjhb
    @cy97cool

    我是从这个文件 https://github.com/helderco/docker-php-5.3/blob/master/Dockerfile 里看到的
    是为了对这个文件的安全加密?

    我知道这段是对文件的完整校验, 那上面的 gpg 公钥和下面这段校验没有关系?

    ```
    && curl -SL "http://php.net/get/php-$PHP_VERSION.tar.xz/from/this/mirror" -o php.tar.xz \
    && curl -SL "http://php.net/get/php-$PHP_VERSION.tar.xz.asc/from/this/mirror" -o php.tar.xz.asc \
    && gpg --verify php.tar.xz.asc \
    ```
    cy97cool
        6
    cy97cool  
       2017-11-08 00:52:32 +08:00   ❤️ 1
    当然有关系 asc 文件是签名文件,这句话就会使用已经存在的密钥检查下载到的文件是不是拥有合法的签名;假设下载过程出错了,这个验证就通不过,整个 Docker build 流程到这里就出错退出

    不如再查查 gpg 的 man 文档: https://explainshell.com/explain?cmd=gpg+--verify+php.tar.xz.asc

    如果你想知道签名者的身份,可以用 https://pgp.mit.edu/ 查询密钥信息,如: http://pgp.mit.edu/pks/lookup?search=0x0B96609E270F565C13292B24C13C70B87267B52D&op=index
    cy97cool
        7
    cy97cool  
       2017-11-08 00:56:55 +08:00   ❤️ 2
    如果攻击者劫持了你从 php.net 的下载 tar.xz 和 tar.xz.asc 的请求,他想通过篡改你下载到的 php 压缩包来给你种上后门,他也并不能产生一个被你`gpg --verfiy`信任的文件和签名,也就不能通过验证 出错退出

    问题来了,前面的从 key server 获取公钥能不能劫持 进行中间人攻击呢?
    xoxo419
        8
    xoxo419  
    OP
       2017-11-08 08:10:36 +08:00
    @cy97cool 原来作用这样的. 感谢!
    xoxo419
        9
    xoxo419  
    OP
       2017-11-08 08:52:27 +08:00
    @cy97cool #7 [维基百科]( https://zh.wikipedia.org/wiki/PGP) 上的这句 "不管是在加密消息时还是在验证签名时,都需要注意用来发送消息的公钥是否确实属于期望的接收者." 是做不了中间攻击的. PS: 我猜的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2705 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:51 · PVG 23:51 · LAX 08:51 · JFK 11:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.