Maven 3 密码加密是如何工作的?

2024-03-10

我正在尝试了解 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.

具体来说,我试图回答文档中未涵盖的以下问题。我将迄今为止收集到的信息以斜体字写在每个问题下方。

  1. 加密的主密码是否仅通过存在于settings-security.xml在只有一个用户可以访问的文件夹中(~/.m2)?如果是这样,为什么要费心加密“主密码”(为什么不只使用一些随机值)?难道“主密码”真的只是密码函数的熵输入吗?称其为密码是令人困惑的 - 我希望 Maven 在解密任何加密的服务器密码之前提示我输入此密码,但它没有。

我的理解是,是的,这仅通过存在于操作系统受保护的文件中来提供安全性。我相信 Maven 允许你加密主密码,这样如果你丢失了主密码settings-security.xml文件,您可以重新生成它。它是否正确?

  1. 主密码和服务器密码是否使用相同的加密过程/密码?服务器密码是基于主密码的,所以算法上肯定有一些不同。这个的源代码在哪里?

马塞洛·莫拉莱斯 (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 插件。

  1. 我观察到多次加密的相同主密码或服务器密码会产生不同的哈希值。根据马塞洛·莫拉莱斯 (Marcelo Morales) 对 How does maven --encrypt-master-password work 的回答 https://stackoverflow.com/a/15792131/885287,这是因为在加密之前将“JVM 配置特定(通常是 SHA1PRNG)64 位随机盐”添加到密码中。 Maven 在编译时使用存储的密码时对其进行解密。这是否意味着盐必须储存在某个地方?

我不知道.

  1. 我还观察到,如果主密码被重新加密并存储在settings-security.xml file, 即使加密的主密码密文现在不同。有人可以解释这是如何工作的吗?

我不知道。在我看来,Maven 正在做一些可疑的事情或在某处存储明文。

  1. 我的理解是加密的密码只能与<server />中的标签settings.xml文件。这是真的?服务器可以在哪里定义settings.xml使用?

我的理解是<server />定义可用于<repositories /> and <distributionManagement />, 但不是<scm />。有人可以验证这一点吗?

  1. 对于这样一个关键功能(构建系统安全性),在我看来,存在很多混乱和糟糕的文档。有人能指出 Maven 3 网站上的文档是如何工作的吗?是否有某个 wiki 链接可以让我尝试改进文档?

我不知道

抱歉,文字墙很长,感谢您的回答。


我的答案是基于阅读 Maven 源代码并做了一些研究。

  1. 加密的主密码是否仅通过存在于settings-security.xml在只有一个用户可以访问的文件夹中 使用权 (~/.m2)?如果是这样,为什么还要费心加密“master”呢? 密码'(为什么不只使用一些随机值)?难道不是‘师父’ 密码'真的只是密码函数的熵输入吗? 称其为密码很令人困惑 - 我希望 Maven 会提示我输入密码 在解密任何加密的服务器密码之前使用此密码,但是 它没。

主密码是加密函数的输入,用于加密/解密服务器密码。如果某人拥有您的个人加密服务器密码,他们将无法解密它们,除非他们也拥有您的主密码。这意味着您可以与其他人自由共享您的 Maven settings.xml 文件,而他们无法解密您的服务器密码。这也是主密码保存在单独文件中的原因。

这个基本原理在某种程度上得到了解释加密指南 https://maven.apache.org/guides/mini/guide-encryption.html#Introduction

  1. 主密码和服务器密码是否使用相同的加密过程/密码?服务器密码基于主密码, 所以算法上肯定存在一些差异。来源在哪里 该代码位于?

据我所知,主密码是使用与服务器密码相同的密码进行加密的。解密服务器密码时,主密码(未加密形式)是输入;解密主密码时,魔术字符串“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.

  1. 我观察到多次加密的相同主密码或服务器密码会产生不同的哈希值。根据马塞洛 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 个字节,位于加密密码之前。

  1. 我还观察到,如果主密码是,则使用一个加密主密码加密的常规密码仍然有效。 重新加密并存储在settings-security.xml file, 甚至 尽管加密的主密码密文现在不同了。 有人可以解释这是如何工作的吗?

这是因为解密的使用主密码的形式,而不是加密的“密文”。因此重新加密不会影响服务器密码加密/解密。

我不知道你最后两个(5 和 6)问题的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven 3 密码加密是如何工作的? 的相关文章

随机推荐

  • 如何排除 Sbt 中的传递依赖(在程序集插件的上下文中)?

    我有两个 Sbt 项目 我的共享空间 and 我的服务 我的共享空间 与依赖关系 libraryDependencies Seq nz ac waikato cms weka attributeSelectionSearchMethods
  • 无法将嵌套应用程序中的自定义 Django 模型指定为 AUTH_USER_MODEL

    我无法指定自定义AUTH USER MODEL如果该模型位于nested应用 这是一些项目结构 project settings py my parent app init py apps py my child app init py a
  • JUnit:如何避免测试实用程序类中的“无可运行方法”

    我已经从JUnit3 8切换到JUnit4 4 我使用 ant 运行测试 所有测试都成功运行 但测试实用程序类失败并出现 无可运行方法 错误 我使用的模式是在测试文件夹下包含名为 Test 的所有类 我知道运行程序找不到任何用 Test 属
  • Scrapy、privoxy 和 Tor:SocketError:[Errno 61] 连接被拒绝

    我将 Scrapy 与 Privoxy 和 Tor 一起使用 这是我之前的问题Scrapy 与 Privoxy 和 Tor 如何更新 IP https stackoverflow com questions 45009940 scrapy
  • 在 Android 上查找圆上的点

    一切看起来都那么简单明了 直到我必须真正对其进行编程 我有什么 我上传了一张图片以更好地解释它 我有一个圈子 我知道 它是半径 中心点坐标 每个按钮的初始坐标 红色圆圈 我希望能够在将灰色圆形图像旋转 10 度时计算红色按钮的新坐标 x1y
  • winform中如何只验证数字?

    如何在不使用按键选项的情况下验证数字 为什么不是Char IsNumber or IsDigit在职的 或者我应该使用正则表达式进行验证 private bool ValidateContact if Char IsNumber textB
  • Java:将浮点二进制转换为浮点十进制

    我想转换表示 IEEE754 双精度数尾数部分的字符串 找不到Java中是否有这样的转换方法 以避免手动添加1 1 2 1 4 1 8等 010000001100101000011111000000000000000000000000000
  • htaccess 清理 URL 的最佳方法是什么?

    我正在为我的网站开发干净的网址 我注意到您在互联网上找到的内容几乎都是将您的干净网址重写为您的服务器可以使用的网址 所以像这样 www domain com profile username gt www domain com profil
  • 用于分析 .Net 应用程序内存转储的工具

    有人可以推荐一个好的吗free除了 Adplus windbg sos 之外 还有用于分析 Net 内存转储的工具吗 你可以尝试一下调试诊断1 1 http blogs msdn com tess archive 2008 05 21 de
  • 是什么导致 Python 错误“bad escape \C”?

    我刚刚编写了一个函数 它将查看文本文件并计算文本文件中 True 和 False 的所有实例 这是我的文件 ATOM 43 CA LYS A 5 14 038 15 691 37 608 1 00 15 15 C True ATOM 52
  • Raft算法:term什么时候会增加?

    Raft将时间划分为任意长度的术语 如图5所示 术语用连续的整数编号 每个任期以一次选举开始 其中一名或多名候选人试图成为领导者 如第 5 2 节所述 如果候选人赢得选举 那么他将在剩余任期内担任领导者 在某些情况下 选举会导致投票分散 在
  • 为什么从搅拌机导出到 Unity 时我的 (FBX) 网格体有孔?

    我现在正在学习雕刻我的角色 当我将 FBX 文件从 Blender 导出到 Unity 时 网格物体的脸上有一个巨大的洞 我该如何预防 解决这个问题 它在 mixamo 中工作得很好 在此输入图像描述 https i stack imgur
  • C++11 中字符串文字的 Unicode 编码

    继一个相关问题 https stackoverflow com questions 6794590 how does file encoding affect c11 string literals 我想问一下C 11中新的字符和字符串文字
  • NUnit 插件与 Resharper 5

    最新的 Resharper v5 版本基于本机 NUnit 代码并允许 NUnit 插件 我有一个 NUnit 插件 可以在 NUnit GUI 中正常工作 但无法使其与 Resharper 一起工作 根据 R 指示 我已将插件库放入 Re
  • 如何使用 PHP/MySQLi 将 NULL 放入 MySQL 整数列?

    我通过 URL 将值传递到 PHP 页面 并在 MySQLi 查询中使用它们 问题在于 对于整数列 空字符串会转换为零 而实际上它需要为 NULL 如何使用 PHP MySQLi 从 URL 中传递的参数获取 NULL 到整数列中 更新 下
  • 不推荐在 build.gradle 中“启用”Android 数据绑定

    in build gradle file dataBinding enabled true enabled已弃用 找不到任何有关它的文档 任何人有任何想法如何解决它 尝试将其替换为 buildFeatures dataBinding tru
  • 获取多个 Pandas DataFrame 的平均值

    我正在生成许多具有相同形状的数据框 并且我想将它们相互比较 我希望能够获得数据帧的平均值和中位数 Source 0 Source 1 Source 2 Source 3 cluster 0 0 001182 0 184535 0 81423
  • 无法让 SendInput() 工作

    我有点绝望了我已经尝试了几个小时了 但就是无法得到SendInput 上班 说实话 我什至无法得到它的认可 它总是说 Error 1 The type or namespace name INPUT could not be found a
  • 如何将页面分为三个垂直部分?

    我想将我的网页转换为四个部分 一横三竖 水平截面还可以 但是垂直截面有两个问题 它们没有填满整个屏幕高度 第三部分与第二部分重叠近10或20个像素 这是我的CSS body width available height available
  • Maven 3 密码加密是如何工作的?

    我正在尝试了解 Maven 3 的 密码加密功能 我发现这个功能的文档记录很少并且令人困惑 例如 功能文档 https maven apache org guides mini guide encryption html and 该功能作者