我正在尝试构建一个jenkins管道,它将通过提交git自动触发。在管道中,我正在执行一个调用REST API的.jar文件。 jenkins服务器是一个已经存在的服务器(由我限制访问)。在.jar文件中,我接受所有SSL证书
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
};
然后安装它
System.setProperty("https.protocols", "SSLv3");
final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
API调用在我的本地系统以及Jenkins服务器中的自由式项目中运行正常,但是,当我尝试创建执行此操作的管道时,它会抛出
“收到致命警报:handshake_failure”
在疯狂地谷歌搜索时,我跑了
openssl s_client -connect myserver.com:443
在我的本地机器和Jenkins管道上都返回了
新增,TLSv1 / SSLv3,密码是ECDHE-RSA-AES128-GCM-SHA256服务器公钥是2048位安全重新协商支持压缩:无扩展:无无ALPN协商SSL会话: 协议:TLSv1.2 密码:ECDHE-RSA-AES128-GCM-SHA256 会议编号:7CAB0E15710F2218A5B35D7819970AE062FFAAC85EFA87C3A534DEB668A7DA71 会话ID-CTX: 主密钥:88CA56C238E916226C7A13EC487069093E97540FD57B18814E43D2810FDDE046CC5E5B67E05A0155AD775019B7EAB824 Key-Arg:无 PSK身份:无 PSK身份提示:无 SRP用户名:无 开始时间:1536747840 超时:300(秒) 验证返回码:0(ok)
我的Jenkins服务器使用JDK 1.7(jar在自由式项目中运行良好)任何帮助都将在解决此问题时受到赞赏。
从上面的评论中可以看出,您遇到的问题是,对于您的管道构建,Java由于某种原因运行了一组不同的已配置密码套件。
您应该能够通过在管道中执行它时使用一些额外的命令行选项调用Java应用程序来解决此问题:
java -Ddeployment.security.SSLv3=true \
-Ddeployment.security.TLSv1=true \
-Ddeployment.security.TLSv1.1=true \
-Ddeployment.security.TLSv1.2=true \
-jar myapp.jar -whatever -other -flags -you -need