Go checksum database

不得不说,Go 官方对安全问题前所未有的重视,随着 Go module 功能的引入,包依赖的安全问题引起了 Go team 的关注,经过激烈的讨论,最终决定推出一个全球的依赖包 Certificate Transparency log 中心。CT log最初其实是在证书领域被应用的,由于一些CA乱颁发或者由于安全问题被签发了很多有问题的可信证书,最终导致严重的安全问题。CT服务的推出让所有被签发的证书公开透明,很容易就能发现有人恶意签发可信证书,窃取用户加密数据。当然了,现在的 chrome 早就支持了CT。回过头来,为了保证开发者的依赖库不被人恶意劫持篡改,Go team 推出了 Go module checksum database。服务器地址为:sum.golang.org。当你在本地对依赖进行变动(更新/添加)操作时,Go 会自动去这个服务器进行数据校验,保证你下的这个代码库和世界上其他人下的代码库是一样的。如果有问题,会有个大大的安全提示。当然背后的这些操作都已经集成在 Go 里面了,开发者不需要进行额外的操作。

go.modgo.sum
  1. <module> <version>[/go.mod] <hash>

如果 go.sum 中的校验匹配失败了,Go 在编译下载的时候会给出提示,一定要关注下为什么今天你下载的代码和昨天不一样了。

GOSUMDB
  1. GOSUMDB="gosum.io+ce6e7565+AY5qEHUk/qmHc5btzW45JVoENfazw8LielDsaI+lEbq6"
-insecure
GONOSUMDB
  1. GONOSUMDB=*.corp.example.com,rsc.io/private

这样的话,像 “git.corp.example.com/xyzzy”, “rsc.io/private”, 和 “rsc.io/private/quux”这些公司和自己的私有仓库就都不会做校验了。

使用 gosum.io 保证下载依赖的完整性和安全性

由于众所周知的原因,golang 的服务器由 Google 托管,所以这项服务我们并不能顺利享受到,那么我们如何能享受到这项集成在 1.13 版本中的服务呢,不用慌,google 特别为我们推出了 sum.golang.google.cn, 如果还访问不了或者速度不够理想,可以尝试使用 gosum.io, 通过设置环境变量进行配置:

Bash(MAC/Linux):

  1. export GOSUMDB=gosum.io+ce6e7565+AY5qEHUk/qmHc5btzW45JVoENfazw8LielDsaI+lEbq6

PowerShell(Windows):

  1. $env:GOSUMDB = "gosum.io+ce6e7565+AY5qEHUk/qmHc5btzW45JVoENfazw8LielDsaI+lEbq6"

Disable:

  1. GOSUMDB='off'
sum.golang.orggosum.io

GOSUMDB 环境变量 - 图1

Happy coding,gophers!

References: