我正在尝试提高存储我的Maven存储库密码的安全性。此apache页面:(https://maven.apache.org/guides/mini/guide-engryption.html)说:
提示密码
在版本3.2.1之前的Maven中,您必须在命令上提供密码 行作为参数(...)。从Maven 3.2.1开始密码是一个 可选的参数,这意味着如果您省略密码,您将是 提示它阻止了上述所有问题。
听起来很棒,我不必清除bash历史记录或vim缓存。但是它无法正常工作!
我正在使用Maven 3.2.2(请参阅下文)在Windows 2008 R2服务器下运行Java 1.7的最新gitbash-windows下(我知道,但我不是Admin)。
我缺少什么?
bb@MACHINE MINGW64 $ mvn --version
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T15:51:42+02:00)
Maven home: C:toolsapache-maven-3.2.2
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: C:Program FilesJavajdk7jre
Default locale: nl_NL, platform encoding: Cp1252
OS name: "windows servevr 2008 r2", version: "6.1", arch: "amd64", family: "windows"
bb@MACHINE MINGW64 $ mvn -ep
{}
bb@MACHINE MINGW64 $ mvn --encrypt-password
{}
bb@MACHINE MINGW64 $ mvn --encrypt-master-password
{}
bb@MACHINE MINGW64 $ mvn --emp
{}
如果我这样做的话,它可以正常工作:
bb@MACHINE MINGW64 $ mvn --encrypt-master-password myPwd
{pohBRxk/rXUHL/TT9wgt/sUvny5ssiCWsij1pgTpU7Q=}
此问题是Java不承认Cyqwin为控制台的结果。调用 system.console()导致null。
导致Maven的行为是在无法获得对控制台的引用时什么都不加密。
if ( cliRequest.commandLine.hasOption( CLIManager.ENCRYPT_MASTER_PASSWORD ) )
{
String passwd = cliRequest.commandLine.getOptionValue( CLIManager.ENCRYPT_MASTER_PASSWORD );
System.out.println("["+passwd+"]");
if ( passwd == null || passwd.isEmpty() || passwd.equalsIgnoreCase("null"))
{
try {
Console cons = System.console();
char[] password = ( cons == null ) ? null : cons.readPassword( "Master password: " );
if ( password != null )
{
// Cipher uses Strings
passwd = String.copyValueOf( password );
// Sun/Oracle advises to empty the char array
java.util.Arrays.fill( password, ' ' );
}
}catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
DefaultPlexusCipher cipher = new DefaultPlexusCipher();
System.out.println(
cipher.encryptAndDecorate( passwd, DefaultSecDispatcher.SYSTEM_PROPERTY_SEC_LOCATION ) );
throw new ExitException( 0 );
}
请参阅此信息,以了解为什么Cygwin不适用于 System.Console()。
您唯一的选择是使用 cmd 。