jarsigner 和代理,具有时间戳权限或替代方案的身份验证

jarsigner and proxy with authentication for timestamp authority or alternatives

以前我们使用的是没有身份验证的代理,jarsigner 对此没有问题。由于代理现在需要用户名和密码,我们无法让 jarsigner 处理这个问题。

有没有办法让 jarsigner 与需要身份验证的代理一起工作?

这是我们之前使用的命令(没有验证):

jarsigner -sigalg SHA256withRSA -digestalg SHA-256 -verbose -tsa 'http://timestamp.digicert.com' -J-Dhttp.proxyHost=my.server -J-Dhttps.proxyPort=8080

我们试过这个:

jarsigner -sigalg SHA256withRSA -digestalg SHA-256 -verbose -tsa 'http://timestamp.digicert.com' -J-Dhttp.proxyHost=my.server -J-Dhttps.proxyPort=8080 -J-Dhttp.proxyUser=user-J-Dhttp.proxyPassword=password

还有这个:

jarsigner -sigalg SHA256withRSA -digestalg SHA-256 -verbose -tsa 'http://timestamp.digicert.com' -J-Djava.net.useSystemProxies=true

None 个正在工作。

有没有办法对有效的 jar 文件进行签名?那就是:jarsigner 可以工作吗?如果没有:还有其他选择吗?

我们正在使用 openjdk8。

import sun.security.tools.jarsigner.Main;
import java.net.Authenticator;
import java.net.PasswordAuthentication;

public class NewJarSigner {
        public static void main(String args[]) throws Exception {
                System.setProperty("http.proxyHost","0.0.0.0");
                System.setProperty("https.proxyHost","0.0.0.0");
                System.setProperty("http.proxyPort","8080");
                System.setProperty("https.proxyPort","8080");

                Authenticator.setDefault(
                        new Authenticator() {
                        @Override
                                public PasswordAuthentication getPasswordAuthentication() {
                                        String authPassword="password";
                                        return new PasswordAuthentication("user", authPassword.toCharArray());
                                }
                        }
                );
                Main js = new Main();
                js.run(args);
        }
}

你用

编译这个
javac NewJarSigner.java -cp /path/to/jdk/lib/tools.jar

你运行这个跟

java -cp .:/path/to/jdk/lib/tools.jar NewJarSigner

并且您有一个新的 jarsigner 可以与代理身份验证一起使用。