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
对于GPG做了简单的总结 blog-PHP中GPG作用
1
hljjhb 2017-11-07 18:14:05 +08:00 via Android
导入 gpg 公钥
|
4
cy97cool 2017-11-07 21:31:42 +08:00 via Android
|
5
xoxo419 OP @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 \ ``` |
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 |
7
cy97cool 2017-11-08 00:56:55 +08:00 2
如果攻击者劫持了你从 php.net 的下载 tar.xz 和 tar.xz.asc 的请求,他想通过篡改你下载到的 php 压缩包来给你种上后门,他也并不能产生一个被你`gpg --verfiy`信任的文件和签名,也就不能通过验证 出错退出
问题来了,前面的从 key server 获取公钥能不能劫持 进行中间人攻击呢? |
9
xoxo419 OP @cy97cool #7 [维基百科]( https://zh.wikipedia.org/wiki/PGP) 上的这句 "不管是在加密消息时还是在验证签名时,都需要注意用来发送消息的公钥是否确实属于期望的接收者." 是做不了中间攻击的. PS: 我猜的
|