首页 » Maven实战 » Maven实战全文在线阅读

《Maven实战》13.6.1 GPG及其基本使用

关灯直达底部

GnuPG(简称GPG,来自http://www.gnupg.org/)是PGP标准的一个免费实现,无论是类UNIX平台还是Windows平台,都可以使用它。GPG能够帮助我们为文件生成签名、管理密钥以及验证签名等。

首先,访问http://www.gnupg.org/download/并下载对应自己平台的GPG分发包,按照官方的文档将GPG安装完毕,运行如下命令检查安装:

在使用GPG之前,先得为自己准备一个密钥对,即一个私钥和一个公钥。之后才可以使用私钥对文件进行签名,并且将公钥分发到公钥服务器供其他用户下载,用户可以使用公钥对签名进行验证。

使用如下命令生成密钥对:

GPG会问你密钥的类型、大小和有效时间,通常使用默认的值即可。GPG还会要求你输入自己的名称、电子邮件地址和对密钥的注释,这些内容会被包含在公钥中并被你的用户看到,因此务必正确填写。最后,还可以提供一个密码来保护密钥,这不是强制性的,但通常最好提供以防止别人得到你的密钥后恶意使用。你将来需要使用私钥和密码为文件提供签名,因此一定要认证保护它们。

现在已经有了密钥对,就可以在命令行中查看它们(其他导入到本地机器的密钥也会被显示),如下面的命令可用来列出所有公钥:

这里的/home/juven/.gnupg/pubring.gpg表示公钥存储的位置。以pub开头的一行显示公钥的长度(1024D)、ID(C6EED57A)以及创建日期(2010-01-13)。下一行显示了公钥的UID,也就是一个由名称、注释和邮件地址组成的字符串。最后一行显示的子钥不用关心。

类似地,下面的命令用来列出本机私钥:

对GPG的公私钥有了基本的了解之后,就可以使用如下命令为任意文件创建一个ASCII格式的签名:

这里的-a选项告诉GPG创建ASCII格式的输出,而-b选项则告诉GPG创建一个独立的签名文件。如果你的私钥拥有密码,这个时候就需要输入密码。如果私钥没有密码,那么只要他人获得了你的私钥,就能够以你的名义对任何内容进行签名,这是非常危险的。

在该例中,GPG会创建一个名为temp.java.asc的签名文件,这时就可以将这个后缀名为.asc的签名文件连同原始文件一起分发给你的用户。如果你的用户已经导入了你的公钥,就可以运行如下命令验证原始文件:

为了能让你的用户获取公钥并验证你分发的文件,需要将公钥分发到公钥服务器中。例如,hkp://pgp.mit.edu是美国麻省理工学院提供的公钥服务器,运行如下命令可将公钥分发到该服务器中:

这里的--keyserver选项用来指定分发服务器的地址,--send-keys用来指定想要分发公钥的ID。你可以罗列本地公钥来查看它们的ID。需要注意的是,公钥会在各个公钥服务器中被同步,因此你不需要重复地往各个服务器分发同一公钥。

现在,你的用户可以将服务器上的公钥导入到本地机器:

上述就是一个基本的签名、分发并验证的流程,在使用Maven发布项目的时候,可以使用GPG为发布文件提供签名。现在读者应该已经知道如何手工完成这一步骤了,下面介绍如何使用Maven GPG Plugin自动化签名这一步骤。