我正在尝试了解 Maven 3 的[密码加密功能。我发现这个功能的文档记录很少并且令人困惑。例如,功能文档 https://maven.apache.org/guides/mini/guide-encryption.html and 该功能作者的博客文章 http://blog.sonatype.com/2009/10/maven-tips-and-tricks-encrypting-passwords/在几个点上互相矛盾。
这个问题比maven --加密主密码如何工作 https://stackoverflow.com/questions/15789984/how-does-mvn-encrypt-master-password-password-work并且不被覆盖Maven encrypt-master-password 选择密码的良好实践 https://stackoverflow.com/questions/16422016/mvn-encrypt-master-password-password-good-practice-for-choosing-password?lq=1.
具体来说,我试图回答文档中未涵盖的以下问题。我将迄今为止收集到的信息以斜体字写在每个问题下方。
- 加密的主密码是否仅通过存在于
settings-security.xml
在只有一个用户可以访问的文件夹中(~/.m2
)?如果是这样,为什么要费心加密“主密码”(为什么不只使用一些随机值)?难道“主密码”真的只是密码函数的熵输入吗?称其为密码是令人困惑的 - 我希望 Maven 在解密任何加密的服务器密码之前提示我输入此密码,但它没有。
我的理解是,是的,这仅通过存在于操作系统受保护的文件中来提供安全性。我相信 Maven 允许你加密主密码,这样如果你丢失了主密码settings-security.xml
文件,您可以重新生成它。它是否正确?
- 主密码和服务器密码是否使用相同的加密过程/密码?服务器密码是基于主密码的,所以算法上肯定有一些不同。这个的源代码在哪里?
马塞洛·莫拉莱斯 (Marcelo Morales) 对 How does maven --encrypt-master-password work 的回答 https://stackoverflow.com/a/15792131/885287链接到GitHub 上的 plexus-cihper 项目 https://github.com/sonatype/plexus-cipher。目前尚不清楚这只是密码,还是提供密码功能的实际 Maven 插件。
- 我观察到多次加密的相同主密码或服务器密码会产生不同的哈希值。根据马塞洛·莫拉莱斯 (Marcelo Morales) 对 How does maven --encrypt-master-password work 的回答 https://stackoverflow.com/a/15792131/885287,这是因为在加密之前将“JVM 配置特定(通常是 SHA1PRNG)64 位随机盐”添加到密码中。 Maven 在编译时使用存储的密码时对其进行解密。这是否意味着盐必须储存在某个地方?
我不知道.
- 我还观察到,如果主密码被重新加密并存储在
settings-security.xml
file, 即使加密的主密码密文现在不同。有人可以解释这是如何工作的吗?
我不知道。在我看来,Maven 正在做一些可疑的事情或在某处存储明文。
- 我的理解是加密的密码只能与
<server />
中的标签settings.xml
文件。这是真的?服务器可以在哪里定义settings.xml
使用?
我的理解是<server />
定义可用于<repositories />
and <distributionManagement />
, 但不是<scm />
。有人可以验证这一点吗?
- 对于这样一个关键功能(构建系统安全性),在我看来,存在很多混乱和糟糕的文档。有人能指出 Maven 3 网站上的文档是如何工作的吗?是否有某个 wiki 链接可以让我尝试改进文档?
我不知道
抱歉,文字墙很长,感谢您的回答。
我的答案是基于阅读 Maven 源代码并做了一些研究。
- 加密的主密码是否仅通过存在于
settings-security.xml
在只有一个用户可以访问的文件夹中
使用权 (~/.m2
)?如果是这样,为什么还要费心加密“master”呢?
密码'(为什么不只使用一些随机值)?难道不是‘师父’
密码'真的只是密码函数的熵输入吗?
称其为密码很令人困惑 - 我希望 Maven 会提示我输入密码
在解密任何加密的服务器密码之前使用此密码,但是
它没。
主密码是加密函数的输入,用于加密/解密服务器密码。如果某人拥有您的个人加密服务器密码,他们将无法解密它们,除非他们也拥有您的主密码。这意味着您可以与其他人自由共享您的 Maven settings.xml 文件,而他们无法解密您的服务器密码。这也是主密码保存在单独文件中的原因。
这个基本原理在某种程度上得到了解释加密指南 https://maven.apache.org/guides/mini/guide-encryption.html#Introduction
- 主密码和服务器密码是否使用相同的加密过程/密码?服务器密码基于主密码,
所以算法上肯定存在一些差异。来源在哪里
该代码位于?
据我所知,主密码是使用与服务器密码相同的密码进行加密的。解密服务器密码时,主密码(未加密形式)是输入;解密主密码时,魔术字符串“settings.security”用作附加输入。
你可以看源码PBEC密码 https://github.com/sonatype/plexus-cipher/blob/master/src/main/java/org/sonatype/plexus/components/cipher/PBECipher.java and MavenCli.java http://svn.apache.org/repos/asf/maven/maven-3/tags/maven-3.0-beta-2/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java.
- 我观察到多次加密的相同主密码或服务器密码会产生不同的哈希值。根据马塞洛
Morales 对 How does maven --encrypt-master-password 的回答
工作 https://stackoverflow.com/a/15792131/885287,这是因为 'a
JVM 配置特定(通常是 SHA1PRNG)64 位随机盐'是
在加密之前添加到密码中。 Maven解密存储
编译时使用的密码。这是否意味着
盐必须储存在某个地方吗?
处理盐的传统方法是将随机盐与加密文本一起存储。请参阅维基百科文章 https://en.wikipedia.org/wiki/Salt_%28cryptography%29.
根据上面链接的源代码,salt 似乎存储为 Base64 解码字节的前 8 个字节,位于加密密码之前。
- 我还观察到,如果主密码是,则使用一个加密主密码加密的常规密码仍然有效。
重新加密并存储在
settings-security.xml
file, 甚至
尽管加密的主密码密文现在不同了。
有人可以解释这是如何工作的吗?
这是因为解密的使用主密码的形式,而不是加密的“密文”。因此重新加密不会影响服务器密码加密/解密。
我不知道你最后两个(5 和 6)问题的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)