Windows 10 + Jenkins 2.4 安装插件时https 的证书问题及解决

2023-09-18 22:18:55

本篇面临与解决的问题

本篇是在 Windows 10中安装Jenkins 2.414.1 , 在安装完成之后安装一些需要的插件, 可以在浏览器端安装插件的时候, 总是不成功, 控制台报以下错误:

 SEVERE  h.model.UpdateCenter$DownloadJob#run: Failed to install antisamy-markup-formatter
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146)
        at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:127)
        at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
        at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434)
Caused: sun.security.validator.ValidatorException: PKIX path building failed
        at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439)
        at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
        at java.base/sun.security.validator.Validator.validate(Validator.java:264)
        at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
        at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:132)
        at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638)
Caused: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

一句话, 还是 https 证书的问题。

之前有总结一篇如何解决这个问题, 参考:
Jenkins 在Windows下插件无法安装问题解决

但是,按照这个方式处理之后,问题还是依旧。

难道是证书导入的不对吗?
使用SSLPoke 查看Java是否能访问插件的 https, 发现都是正常的, 命令如下:

java SSLPoke updates.jenkins.io 443
java SSLPoke get.jenkins.io 443

返回都是:

Successfully connected

也就是说, 证书导入之后, Java访问是正常的, 但是Jenkins 却无法下载插件。

是因为Jenkins无法找到证书库吗, 于是在启动的时候使用 javax.net.ssl.keyStore 指定证书库文件, 命令如下:

java -Djavax.net.ssl.keyStore="C:\Program Files\Java\xx\lib\security\cacerts" -storepass changeit  -jar jenkins.war

问题还是依旧,于是想着:
是否可以让Jenkins 忽略证书访问呢? 使用 hudson.model.DownloadService.noSignatureCheck 参数设置下载的时候忽略证书:如下:

java -Dhudson.model.DownloadService.noSignatureCheck=true -jar jenkins.war

实验结果: 失败。

解决方案

在启动的后台终端看到如下一条提示:

Caused: java.io.IOException: Failed to download from https://updates.jenkins.io/download/plugins/cloudbees-folder/6.848.ve3b_fd7839a_81/cloudbees-folder.hpi (redirected to: https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/cloudbees-folder/6.848.ve3b_fd7839a_81/cloudbees-folder.hpi)

看这条的意思是: 从官方下载失败了, 重定向到清华大学的镜像。这时脑海闪过一个死马当成活马医的想法, 导入 清华大学的镜像的证书试试:

  1. 在浏览器打开 https://mirrors.tuna.tsinghua.edu.cn/
  2. 下载证书
  3. 导入证书
  4. 到Jenkins中安装插件

惊喜出现了, 竟然可以了。 下载的插件文件位于:C:\Users\xxx.jenkins\plugins。安装完成就可以使用, 不需要重启。

本篇相关的环境搭建

Jennkins从 Jenkins 2.357 和 LTS 2.361.1版本之后需要JDK 11 或者JDK 17之上的版本。
这里的JDK是解压版,不需要安装, 解压后将目录jdk-17.0.2 复制到C:\Program Files\Java 下,如果机器有其他版本的Java, 复制后的目录结构如下:
在这里插入图片描述

修改JAVA_HOME 以及Path 环境变量, 使机器使用 JDK 17, 也可以临时设置,需要注意的是Path默认会有一个值 C:\Program Files (x86)\Common Files\Oracle\Java\javapath, 修改Java版本的时候要注意这个。

本篇相关的JDK, Jenkins 以及常用插件可以通过以下地址一键下载:

https://download.csdn.net/download/oscar999/88354562

Jenkins 安装成功后的页面如下:

在这里插入图片描述

关于内部根证书

在企业环境中,经常需要使用根证书对外部证书进行包装和签名,来创建所谓的“代理证书”或“包装证书”。这些证书提供了额外的验证和安全性,可以增加一层来自企业内部的信任。

在这种设置中,一般情况的流程如下:

  1. 创建或引入企业根证书:企业首先需要有一个被内部服务器、设备和用户所信任的根证书。这可以是自签名的,也可以是从商业或公开的认证颁发机构购买的。

  2. 创建证书签名请求(CSR):对于需要签名的外部证书,您需要先创建一个与该证书相关联的 CSR。这通常涉及到输入一些相关信息,例如您的组织和服务器的名称、位置等。

  3. 使用根证书签名 CSR:然后,您可以使用您的企业根证书签名 CSR,创建一个新的服务器证书。这个新的证书是原来的外部证书的“包装版”,它现在包含了来自您的企业的签名。

  4. 在服务器上使用新的证书:最后,您可以在您的服务器上使用这个新的被签名的证书,代替原先的外部证书。

证书的验证

内部根证书所签发的其他证书需要进行以下步骤:

  1. 检查证书链: 首先检查证书的签名链是否完整。一个证书应该能够在证书链中向上追溯到其签发的根证书。在一个浏览器环境中,它会自动执行这个过程。

  2. 验证根证书: 根证书需要被特定应用或操作系统信任。如果根证书是内部私有证书,那么它同样需要被手动安装在受信任的根证书存储中。

  3. 检查证书的有效期: 检查证书是否在有效期内。证书都有一个开始日期和一个到期日期,并且仅在这段时间内有效。

  4. 查找证书撤销列表(CRL)或者在线证书状态协议(OCSP): 证书可能在它的有效期内被撤销。验证过程需要检查证书是否已被撤销。

  5. 验证证书的使用目的: 验证证书是否被用于它被设计的用途。例如,服务器证书必须用于 SSL/TLS 通信。

具体的验证步骤可能因环境和具体的需求来变化。在编程环境中,这些验证步骤可能需要自己去实现,或者是使用第三方库来完成。在浏览器和操作系统环境中,这些步骤通常是自动进行的。

自有根证书可能的问题

使用自有的根证书,并发现无法正常访问外部站点,这可能由多个原因导致:

代理或防火墙设置: 你的网络可能有一个代理服务器或防火墙,这些可能需要特殊证书来建立安全连接。如果你的设备没有安装正确的证书,可能不能访问外部网站。你可能需要联系你的IT部门来获取并安装正确的证书。

证书权限: 有可能你的根证书或者中间证书并不允许你的设备访问外部资源。你可能需要检查你的根证书的权限设置,或者联系你的IT部门寻求解决办法。

证书链问题: 如果你的证书链有问题,可能会阻止你的设备成功的对外部网站进行TLS握手。这可能是因为证书链缺失,或者你的企业的根证书没有正确的签名外部资源的证书。

这里可能的问题就是本篇开篇遇到的问题了。



更多推荐

windows安装linux部署docker服务全过程

windows安装linuxhttps://blog.csdn.net/laterstage/article/details/131460688如果不能查看linuxip信息,需要安装:yuminstallnet-tools.x86_64-ylinux安装Docker随着容器技术的兴起,Docker已经成为了最为流行的

Easyui里的datagrid嵌入select下拉框

问题:想使用datagird里嵌入select下拉框,并在提交form表单时获取datagrid选中的每行数据里的每个下拉框选中的值。解决方案:其中economicIssuesSelect使用下拉框,重点关注initEconomicIssues(row)方法。这里的方法需要传递row$('#queryPcpTable'

图论第三天|130. 被围绕的区域、417. 太平洋大西洋水流问题、827. 最大人工岛

130.被围绕的区域文档讲解:代码随想录-130.被围绕的区域状态:开始学习。思路:步骤一:深搜或者广搜将地图周边的‘O’全部改成’A’,如图所示:步骤二:再遍历地图,将‘O’全部改成‘X’(地图中间的‘O’改成了‘X’),将‘A’改回‘O’(保留的地图周边的‘O’),如图所示:本题代码(dfs):classSolut

Android 实战项目分享(一)用Android Studio绘制贝塞尔曲线的艺术之旅

一、项目概述欢迎来到创意之源!我们精心打造的绘图应用程序将带你进入一个充满艺术和技术的奇妙世界。通过使用AndroidStudio,我们实现了绘制贝塞尔曲线的功能,让你能够轻松创作出令人惊叹的艺术作品。不论你是热爱绘画的大学生还是渴望学习的艺术爱好者,这个应用程序将为你点燃创作的激情,让你沉浸在绘画的乐趣中。二、主要技

vue+axios+el-progress(elementUI组件)实现下载进度条实时监听(小白简洁版)

一、实现效果二、实现方式方案:使用axios方法onDownloadProgress方法监听下载进度使用此方式的前提!!!请让后端在响应头中加上content-length,存放下载文件的总大小,如下图:三、代码1、进度条页面代码如下:<Spinfixv-if="spinVisible"><Icontype="ios-

天翎知识管理系统:强大的权限管理功能,保障知识安全

编者按:知识管理系统的权限管理功能,可以帮助企业实现对知识库的精细化管理,保证知识库的安全性和稳定性。本文将介绍天翎知识管理系统的权限管理体系,通过权限管理,控制用户的编辑和审核权限,从而保证知识内容的准确性和质量。知识管理系统权限管理的重要性保护知识安全:通过权限管理,可以控制哪些用户可以访问、修改甚至删除特定的知识

汽车电子AEC Q101车规认证FDD9507L-F085 P沟道MOS管

深力科带你了解关于汽车电子AECQ101车规认证?是一种针对分立半导体的可靠性测试认证程序,由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性、温度循环和湿度变化等方面的测试要求。AECQ101是汽车电子领域的一个产品认证标准,它

第一次课(反馈,未讲评)

目标服务和目标进程是两个概念,在计算机领域中有着不同的含义和用法。目标服务(TargetService)指的是在分布式系统或网络中提供特定功能或服务的软件组件或模块。它通常以独立的方式运行,通过接收请求并提供相应的功能来满足服务需求。例如,Web服务器、数据库服务器、文件服务器等都可以被视为目标服务。目标进程(Targ

代码随想录训练营 DP

代码随想录训练营DP583.两个字符串的删除操作🌸代码72.编辑距离🌸代码今天整理的东西都放在注释里了583.两个字符串的删除操作🌸给定两个单词word1和word2,返回使得word1和word2相同所需的最小步数。每步可以删除任意一个字符串中的一个字符。代码funcminDistance(w1string,w

【Linux】【网络】协议:(序列化和反序列化)json 的安装和简单使用

文章目录1.下载json2.基本使用value类型:万能类型Writer类型:序列化Reader类型:反序列化3.使用举例1.下载jsonyummakecachefastyum-yinstalljsoncpp-devel2.基本使用头文件:#include<jsoncpp/json/json.h>编译时需要加上-ljs

Qt中音频的使用

对于音频我们在使用的过程中一般是录制音频、播放音频。针对这两个需求介绍Qt中音频的使用。Qt中音频的录制步骤:1、获取系统中的音频设备。2、创建QAudioRecorder对象,指定使用的音频设备,通过QAudioRecorder的setAudioInput函数设置。3、设置音频的保存位置,通过QAudioRecord

热文推荐