我们使用 Jenkins 在不同的虚拟机中驱动自动化 GUI 测试。操作系统是 Win7/64 和其他 Windows 变体。虚拟机使用 JNLP 方式连接到 Jenkins Master。无法切换到其他连接,因为作业必须使用 GUI 执行程序。
由于安全要求的提高,Java 现在发出一个对话框来确认 Jenkins Remoting Agent 的执行。这显然会破坏测试的自动执行。此对话框每 24 小时显示一次。将这段时间增加到一年也可以解决我们的问题。
提供的细节提到了不同的方面,比如 应用程序的关联文件(JNLP)没有数字签名
我们尝试了不同的 Java 版本(7u67、Java 8u11 和 8u20)和不同的安全设置。
Jenkins 是最新的稳定版 1.565.1(尝试更新和新安装的版本)。在全新安装中也尝试了最新的 Jenkins 1.576。
这个问题是可以在我们这边解决还是只能在 Jenkins 那边解决? 有解决这个问题的想法吗?
最佳答案
这个问题的解决方案是使用 Deployment Rule Set .主要困难是在正确的位置创建和存储证书。
这是解决上述问题的分步指南
安装 Java SDK (v7)
生成自签名 CA,有效期 50 年:
"C:\Program Files\Java\jre7\bin\keytool.exe" -genkeypair -alias selfsigned -keyalg RSA -keypass changeit -keystore identity.jks -storepass changeit -startdate "2000/01/01 00:00:00" -validity 18262 -keysize 2048
要从 keystore 中提取证书,请使用此命令:
"C:\Program Files\Java\jre7\bin\keytool.exe" -exportcert -alias selfsigned -file Our_CA.cer -keystore identity.jks -storepass changeit
将 ruleset.xml 创建为 ANSI 文件(例如使用 Notepad++):
<ruleset version="1.0+"> <rule> <id location="http://url.to.web.server" /> <action permission="run" /> </rule> <rule> <id /> <!-- The last rule is the default policy and the id should be blank. --> <action permission="default" /> </rule> </ruleset>
将 ruleset.xml 转换为 jar 文件:
"C:\Program Files\Java\jdk1.7.0_67\bin\jar.exe" -cvf DeploymentRuleSet.jar ruleset.xml
签署 jar DeploymentRuleSet.jar
"C:\Program Files\Java\jdk1.7.0_67\bin\jarsigner.exe" -keystore "identity.jks" -signedjar "DeploymentRuleSet.jar" DeploymentRuleSet.jar selfsigned verify jar: "C:\Program Files\Java\jdk1.7.0_67\bin\jarsigner.exe" -verify -keystore "identity.jks" -verbose -certs DeploymentRuleSet.jar
切换到应启动 JNLP 应用程序的 PC
将签名的 DeploymentRuleSet.jar 复制到 C:\Windows\Sun\Java\Deployment
必须在 Win7/32 上创建文件夹。
清理 C:\Users\\AppData\LocalLow\Sun 和 C:\Jenkins-Slave\
删除整个文件夹
C:\Users\<user name>\AppData\LocalLow\Sun
(和甲骨文) 删除C:\Jenkins-Slave\
中的所有文件除了批处理 StartJenkinsSlave启动配置 Java,切换安全选项卡
检查名为“查看 Activity 部署规则集”的链接。链接必须显示 ruleset.xml 的内容。
将自签名证书导入为可信证书和签名者 CA
在安全选项卡上开始管理证书并导入之前导出的证书文件 Our_CA.cer 两次。将其作为可信证书和 Singer CA 导入。
Manage Certificates -> Certificate Type: Trusted Certificate/Geschützte Zertifikate, 导入 AND 证书类型:签名者 CA/Signaturgeber CA,导入
关于java - Jenkins Slave 使用JNLP 需要安全提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25429270/