首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Maven官网学习》45密码加密

此系列文章,作为我在Maven官网学习的记录,每阅读学习完一份即会更新。

介绍

Maven 2.1.0+现在支持服务器密码加密。此解决方案解决的主要用例是:

多个用户共享同一个构建计算机(服务器,CI框)

一些用户有权将Maven工件部署到存储库,有些则没有。

这适用于任何服务器操作,需要授权,而不仅仅是部署

settings.xml在用户之间共享

实施的解决方案增加了以下功能:

授权用户在$ /.m2文件夹中 有一个额外的settings-security.xml文件

此文件包含加密的主密码,用于加密其他密码

或者它可以包含重定位 - 对另一个文件的引用,可能在可移动存储上

此密码首先通过CLI创建

settings.xml中的服务器条目具有加密的密码和/或密钥库密码

现在 - 这是在创建主密码并存储在适当位置后通过CLI完成的

如何创建主密码

使用以下命令行:

mvn --encrypt-master-password

注意:由于Maven 3.2.1不再使用密码参数(有关详细信息,请参阅下面的提示)。Maven会提示输入密码。早期版本的Maven不会提示输入密码,因此必须在明文的命令行中输入密码。

此命令将生成密码的加密版本,例如

{ jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u + 9EF1iFQyJQ =}

将此密码存储在$ /.m2 / settings-security.xml中 ; 它应该看起来像

完成此操作后,您可以开始加密现有服务器密码。

如何加密服务器密码

您将必须使用以下命令行:

mvn --encrypt-password

注意:就像--encrypt-master-password一样,自Maven 3.2.1起不再使用密码参数(有关详细信息,请参阅下面的提示)。

这个命令会产生一个加密版本,比如说

将其剪切粘贴到服务器部分的settings.xml文件中。这看起来像:

...

...

my.server

foo

...

...

请注意,密码可以包含大括号之外的任何信息,以便以下内容仍然有效:

...

...

my.server

foo

Oleg reset this password on 2009-03-11, expires on 2009-04-11

...

...

然后你可以使用,例如,部署插件,写入这个服务器:

mvn deploy:deploy-file -Durl=https://maven.corp.com/repo \

-DrepositoryId=my.server \

-Dfile=your-artifact-1.0.jar \

如何在可移动驱动器上保留主密码

完全按照上述说明创建主密码,并将其存储在可移动驱动器上,例如在OSX上,我的USB驱动器安装为/ Volumes / mySecureUsb,所以我存储

在文件/Volumes/mySecureUsb/secure/settings-security.xml中

然后我用以下内容创建$ /。m2 / settings-security.xml:

/Volumes/mySecureUsb/secure/settings-security.xml

这可确保加密仅在OS安装USB驱动器时有效。这解决了仅授权某些人部署并发布这些设备的用例。

提示

在密码中转义花括号文字(自:Maven 2.2.0)

有时,您可能会发现您的密码(或其加密形式)实际上可能包含“{”或“}”作为字面值。如果您将这样的密码添加到settings.xml文件中,您会发现Maven对它做了一些奇怪的事情。具体来说,Maven会将'{'文字前面的所有字符和'}'文字后面的所有字符视为注释。显然,这不是您在这种情况下想要的行为。你真正需要的是一种在密码中转义花括号文字的方法。

从Maven 2.2.0开始,你可以使用广泛使用的'\'转义字符来做到这一点。如果您的密码如下所示:

jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+

密码安全

编辑settings.xml并运行上述命令仍然可以将您的密码以明文形式存储在本地。您可能需要检查以下位置:

Shell历史(例如通过运行历史记录)。您可能希望在加密上述密码后清除历史记录

编辑器缓存(例如〜/ .viminfo)

另请注意,加密密码可由具有主密码和设置安全文件的人解密。如果您希望可能检索settings.xml文件,请保持此文件的安全(或单独存储)。

在一些平台上需要用引号包括一些内容,特别是具有特殊字符,如内容引用您的密码%,!,$等在那里。例如,在Windows上,您必须小心以下内容:

以下示例在Windows上不起作用:

mvn --encrypt-master-password a!$%^b

而以下将适用于Windows:

mvn --encrypt-master-password "a!$%^b"

如果您使用的是linux / unix平台,则应使用单引号作为上述主密码,否则您会惊讶于主密码的使用不起作用(由美元符号和感叹号引起)。

提示输入密码

在版本3.2.1之前的Maven中,您必须在命令行上输入密码作为参数,这意味着您可能需要转义密码。此外,shell通常会存储您输入的命令的完整历史记录,因此任何有权访问您计算机的人都可以从shell的历史记录中恢复密码。

从Maven 3.2.1开始,密码是一个可选参数,这意味着如果省略密码,系统将提示您输入密码,这将阻止上述所有问题。

因此,我们强烈建议使用Maven 3.2.1及更高版本来防止转义特殊字符的问题,当然还有与bash历史相关的安全问题或与密码相关的环境问题。

下次见

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190403A0534200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券