java - Jenkins Slave 使用JNLP 需要安全提示

标签 java jenkins continuous-integration automated-tests jnlp

我们使用 Jenkins 在不同的虚拟机中驱动自动化 GUI 测试。操作系统是 Win7/64 和其他 Windows 变体。虚拟机使用 JNLP 方式连接到 Jenkins Master。无法切换到其他连接,因为作业必须使用 GUI 执行程序。

由于安全要求的提高,Java 现在发出一个对话框来确认 Jenkins Remoting Agent 的执行。这显然会破坏测试的自动执行。此对话框每 24 小时显示一次。将这段时间增加到一年也可以解决我们的问题。

提供的细节提到了不同的方面,比如 应用程序的关联文件(JNLP)没有数字签名

enter image description here

我们尝试了不同的 Java 版本(7u67、Java 8u11 和 8u20)和不同的安全设置。

Jenkins 是最新的稳定版 1.565.1(尝试更新和新安装的版本)。在全新安装中也尝试了最新的 Jenkins 1.576。

这个问题是可以在我们这边解决还是只能在 Jenkins 那边解决? 有解决这个问题的想法吗?

最佳答案

这个问题的解决方案是使用 Deployment Rule Set .主要困难是在正确的位置创建和存储证书。

这是解决上述问题的分步指南

  1. 安装 Java SDK (v7)

  2. 生成自签名 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
    
  3. 要从 keystore 中提取证书,请使用此命令:

    "C:\Program Files\Java\jre7\bin\keytool.exe" -exportcert -alias selfsigned -file Our_CA.cer -keystore identity.jks -storepass changeit
    
  4. 将 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>

  5. 将 ruleset.xml 转换为 jar 文件:

    "C:\Program Files\Java\jdk1.7.0_67\bin\jar.exe" -cvf DeploymentRuleSet.jar ruleset.xml
    
  6. 签署 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

  1. 将签名的 DeploymentRuleSet.jar 复制到 C:\Windows\Sun\Java\Deployment

    必须在 Win7/32 上创建文件夹。

  2. 清理 C:\Users\\AppData\LocalLow\Sun 和 C:\Jenkins-Slave\

    删除整个文件夹C:\Users\<user name>\AppData\LocalLow\Sun (和甲骨文) 删除 C:\Jenkins-Slave\ 中的所有文件除了批处理 StartJenkinsSlave

  3. 启动配置 Java,切换安全选项卡

    检查名为“查看 Activity 部署规则集”的链接。链接必须显示 ruleset.xml 的内容。

  4. 将自签名证书导入为可信证书和签名者 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/

相关文章:

java - QueryDSL 和 Hibernate 搜索 isNull 和 isNotNull 查询

python - Jenkins - 推送部署测试步骤失败

docker - 如何将环境变量传递到 Jenkins 的 docker 容器中?

continuous-integration - 无法连接到 VSTS LocalDB 实例

node.js - 在 Docker 容器中预缓存 node_modules

参数化类的java流返回数组

java - 带有先决条件的轻量级 Java 库?

git - Jenkins 中的 hudson.util.HudsonFailedToLoad 错误

maven - "mvn: not found"在 Jenkins 奴隶

使用值列表实现的 Java SortedMap