发布jar包到maven中央仓库之gpg密钥对生成

完整过程参考:发布jar包到maven中央仓库教程

发布jar包到maven中央仓库中,有一个生成gpg密钥对的操作,这里简单介绍下密钥的生成操作以及我对为啥要使用这个密钥对的理解。

生成gpg密钥对需要下载相应的gpg工具。我这里是mac的环境,故直接使用brew安装(其他环境百度一下很多)

brew install gpg

生成gpg密钥

gpg --gen-key

根据提示输入用户名,邮箱,之后输入o回车确定

接下来需要输入一个密码。这个密码会在上传到maven的时候用到,需要记住,回车之后密钥就生成了。

图中我打码的部分就是生成的公钥id,我们复制他,接下来我们需要把这个公钥上传到服务器,使用如下命令

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys xxxx

至此,我们gpg密钥对的部分就完成了。

问题记录

  • 假如我们生成一个密钥对之后,忘记密钥对的公钥id怎么办呢?
    使用这个命令查看

    gpg --list-keys
    
  • 如何验证我们的公钥已经发送到服务器成功了呢?
    使用下方命令检验

    gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys xxxx
    
  • gpg密钥忘记密码怎么办?
    参考:发布jar包到maven中央仓库之gpg忘记密码(gpg指定key进行打包)

  • gpg密钥的作用?
    接下来说说我对使用gpg密钥的理解。因为我一直有个疑问,gpg密钥的作用是什么,看网上的资料是说,防止你的jar包被篡改,但是我的疑问是,gpg密钥谁都可以生成,上传jar包的时候也没有指定说绑定哪个gpg密钥,那么他是怎么做到防止jar包被篡改的呢?别人也可以在其他电脑上自己生成一个密钥然后做上传操作。带着这个疑问在网上找了半天也没有找到答案。后来我好像想通了。我的理解是:gpg密钥的作用防止jar包被篡改只是在数据层防止中间人把你的jar包修改了。有点类似https。因为你再上传你jar包的时候是需要你再你本地maven的配置文件中配置sonatype的用户名跟密码,所以你的包只能你自己上传。但是为了避免中间人攻击,所以会使用gpg在你上传的时候对jar进行处理(此处我暂时这么理解),maven中央仓库在接受到你上传的jar包之后会用gpg公钥去验证这个jar包是不是还是你上传的jar包,还是说被别人修改过,以此来做到防篡改。