当前位置: 首页 > news >正文

登陆harbor发现证书是错误的, 那么如何更新harbor的证书呢

Error response from daemon: Get "https://172.16.21.35/v2/": tls: failed to verify certificate: x509: certificate is valid for 127.0.0.1, ::1, 172.16.21.30, not 172.16.21.35

版本 v2.10.1-b7b88476  不需要从头看, 直接看最下面的成功的证书创建

这里面首先遇到的坑是 openssl版本太低, 需要先升级到 1.1.1 

https://openssl-library.org/source/ 网站拿到最新版本 3.4wget https://github.com/openssl/openssl/releases/download/openssl-3.4.0/openssl-3.4.0.tar.gz
tar -zxvf openssl-3.4.0.tar.gz
cd openssl-3.4.0
mv /usr/local/openssl /usr/local/openssl_bak
./config --prefix=/usr/local/opensslmakemake installmv /usr/bin/openssl /usr/bin/openssl_bak
mv /usr/include/openssl /usr/include/openssl_bakln -s /usr/local/openssl/bin/openssl /usr/bin/opensslln -s /usr/local/openssl/include/openssl /usr/include/openssl

上述config报错

Can't locate IPC/Cmd.pm in @INC (@INC contains: /etc/yum.repos.d/openssl-3.4.0/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /etc/yum.repos.d/openssl-3.4.0/external/perl/Text-Template-1.56/lib) at /etc/yum.repos.d/openssl-3.4.0/util/perl/OpenSSL/config.pm line 19.
BEGIN failed--compilation aborted at /etc/yum.repos.d/openssl-3.4.0/util/perl/OpenSSL/config.pm line 19.
Compilation failed in require at /etc/yum.repos.d/openssl-3.4.0/Configure line 23.
BEGIN failed--compilation aborted at /etc/yum.repos.d/openssl-3.4.0/Configure line 23.解决办法: sudo yum install perl-IPC-Cmd

报错

openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory

openssl: error while loading shared libraries: libcrypto.so.3: cannot open shared object file: No such file or directory

解决办法

 find / -name libssl.so.3找到 
/usr/local/openssl/lib64/libssl.so.3创建软件链接sudo ln -sf /usr/local/openssl/lib64/libssl.so.3 /lib64/libssl.so.3sudo ln -sf /usr/local/openssl/lib64/libcrypto.so.3 /lib64/libcrypto.so.3

ssh 172.16.20.20 

cd /opt/harbor

更新 /opt/harbor 目录中的证书,通常是指更新 Harbor 的 HTTPS 证书。以下是更新 Harbor 证书的详细步骤:

生成 dockerhub.kubekey.local.keydockerhub.kubekey.local.pemdockerhub.kubekey.local-key.pem 这样的证书文件,通常是在生成自签名证书或证书签名请求(CSR)时进行的。根据您提供的文件名结构,它们可能涉及到私钥文件(.key)、证书文件(.pem)以及可能的密钥文件(.key.pem)。下面是生成这些文件的步骤:

1. 生成私钥文件 (dockerhub.kubekey.local.key)

生成私钥文件是生成 SSL 证书的第一步。使用 openssl 生成一个私钥文件。

根据 harbor.yml里面的配置

certificate: /etc/ssl/registry/ssl/dockerhub.kubekey.local.pem
private_key: /etc/ssl/registry/ssl/dockerhub.kubekey.local-key.pem
在目录  /etc/ssl/registry/ssl 清掉原来的文件, 重新生成

cd /etc/ssl/registry/ssl

openssl genpkey -algorithm RSA -out dockerhub.kubekey.local.key -pkeyopt rsa_keygen_bits:2048

这个命令会生成一个 2048 位的 RSA 私钥,并将其保存为 dockerhub.kubekey.local.key

2. 生成证书签名请求(CSR) (dockerhub.kubekey.local.csr)

使用私钥生成证书签名请求(CSR)。CSR 用于向证书颁发机构(CA)申请签名证书,或者生成自签名证书。

 
openssl req -new -key dockerhub.kubekey.local.key -out dockerhub.kubekey.local.csr

执行此命令时,您需要提供一些信息:

  • Country Name (2 letter code): 国家代码,例如 CN(中国)。
  • State or Province Name: 省份名称。
  • Locality Name: 城市名称。
  • Organization Name: 公司名称。
  • Organizational Unit Name: 部门名称。
  • Common Name: 常见名称,通常是要为其创建证书的域名(例如 dockerhub.kubekey.local)。
  • Email Address: 联系邮箱。
  • 随机密码: 8ZNDyM4cTzLkwG5w

生成的 dockerhub.kubekey.local.csr 将包含该域名的证书请求信息。

3. 生成自签名证书(.pem.key.pem

如果您打算使用自签名证书,则可以使用 openssl 生成自签名证书。以下命令将生成 dockerhub.kubekey.local.pemdockerhub.kubekey.local-key.pem

openssl req -x509 -key dockerhub.kubekey.local.key -in dockerhub.kubekey.local.csr -out dockerhub.kubekey.local.pem -days 3650

此命令会创建一个有效期为 365 天的自签名证书,并将其保存为 dockerhub.kubekey.local.pem

解释:
  • -x509: 生成自签名证书。
  • -key dockerhub.kubekey.local.key: 使用之前生成的私钥文件。
  • -in dockerhub.kubekey.local.csr: 使用 CSR 文件。
  • -out dockerhub.kubekey.local.pem: 输出自签名证书文件。
  • -days 365: 设置证书有效期为 365 天。

4. 如果需要将证书和私钥合并为 .pem 格式

有时您可能需要将私钥和证书合并为一个 .pem 文件:

 
cat dockerhub.kubekey.local.key dockerhub.kubekey.local.pem > dockerhub.kubekey.local-key.pem

这会将私钥和证书文件合并成一个文件,命名为 dockerhub.kubekey.local-key.pem


执行以上步骤后,您应该会生成以下文件:

  • dockerhub.kubekey.local.key:私钥文件。
  • dockerhub.kubekey.local.csr:证书签名请求文件。
  • dockerhub.kubekey.local.pem:自签名证书文件。
  • dockerhub.kubekey.local-key.pem:合并后的证书和私钥文件。


5. 重启 Harbor 服务

在替换证书后,需要重启 Harbor 服务使新证书生效。

重启命令:
cd /opt/harborsudo docker-compose downsudo docker-compose up -d
验证服务状态:

sudo docker-compose ps

6. 验证证书是否生效

使用 curl 验证:

curl -v https://172.16.20.20

或通过浏览器访问:

打开浏览器访问 https://172.16.20.20,查看证书是否为更新后的版本。

上面的替换没有生效, 检查docker-compose.yml文件 , 这里的nginx对外的端口是 443, https的端口, 先替换这里的证书  /mnt/registry/secret/cert

 proxy:image: goharbor/nginx-photon:v2.10.1container_name: nginxrestart: alwayscap_drop:- ALLcap_add:- CHOWN- SETGID- SETUID- NET_BIND_SERVICEvolumes:- ./common/config/nginx:/etc/nginx:z- /mnt/registry/secret/cert:/etc/cert:z- type: bindsource: ./common/config/shared/trust-certificatestarget: /harbor_cust_certnetworks:- harborports:- 3880:8080- 443:8443depends_on:- registry- core- portal- loglogging:driver: "syslog"options:syslog-address: "tcp://localhost:1514"tag: "proxy"

在目录 /mnt/registry/secret/cert 重新生成这两个文件 server.crt  server.key

cd /mnt/registry/secret/cert生成新的私钥文件(server.key)如下命令不要用, 生成的是 PKCS#8格式 比较短openssl genpkey -algorithm RSA -out /mnt/registry/secret/cert/server.key经过验证 如下命令生成的是 PKCS#1 格式 的私钥, 
openssl genrsa -out server.key 2048生成新的证书请求文件(server.csr)openssl req -new -key /mnt/registry/secret/cert/server.key -out /mnt/registry/secret/cert/server.csrA challenge password: SmKc8QHpKBWu2RUJ生成自签名证书(server.crt)
openssl x509 -req -in /mnt/registry/secret/cert/server.csr -signkey /mnt/registry/secret/cert/server.key -out /mnt/registry/secret/cert/server.crt -days 36500最后生成文件列表server.crt  server.csr  server.key

然后重启harbor

cd /opt/harborsudo docker-compose downsudo docker-compose up -d

# 对于 Linux 客户端
将文件 /mnt/registry/secret/cert/server.crt 上传至 172.16.21.35:/etc/ssl/certsmv server.crt 172.16.20.20.server.crt然后更新
sudo update-ca-certificatesopenssl x509 -in /etc/ssl/certs/172.16.20.20.server.crt -noout -text

在172.16.21.35上验证证书


curl https://172.16.20.20  报错curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.haxx.se/docs/sslcerts.htmlcurl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.cp ca.crt /etc/ssl/certs/172.16.20.20.server.crt
# 修改文件权限
sudo chmod 777 /etc/ssl/certs/172.16.20.20.server.crtcurl --cacert /etc/ssl/certs/172.16.20.20.server.crt https://172.16.20.20这条命令正常执行的curl -v https://172.16.20.20这条也是正常的curl https://172.16.20.20 也正常了  , 反而 curl --cacert /etc/ssl/certs/172.16.20.20.server.crt https://172.16.20.20 却不行了.

配置docker的自签证书

mkdir -p /etc/docker/certs.d/172.16.20.20
上传 server.crt 并命名 ca.crt
重启 docker生成 server.cert, 与 server.key 一并上传到目录 /etc/docker/certs.d/172.16.20.20openssl x509 -req -in server.csr -signkey server.key -out server.certsudo systemctl restart docker验证依然报错docker login 172.16.20.20
Username: admin
Password: 
Error response from daemon: Get "https://172.16.20.20/v2/": tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead使用如下方法生成: openssl req -newkey rsa:4096 -nodes -sha256 -keyout server.key -x509 -days 36500 -out server.crt -addext "subjectAltName = DNS:172.16.20.20"

登陆docker harbor遇到报错

root@master:/etc/docker/certs.d# docker login 172.16.20.20
Username: admin
Password: 
Error response from daemon: Get "https://172.16.20.20/v2/": tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead

在上述生成证书的基础上 增加一个配置

vi openssl.cnf

[req]
default_bits        = 2048
default_keyfile     = server.key
distinguished_name  = req_distinguished_name
req_extensions      = v3_req
x509_extensions     = v3_ca
string_mask         = utf8only[req_distinguished_name]
countryName         = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = California
localityName        = Locality Name (eg, city)
localityName_default = San Francisco
organizationalName = Organization Name (eg, company)
organizationalName_default = Example Inc.
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default  = 172.16.20.20
commonName_max      = 64[v3_req]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names[alt_names]
DNS.1   = 172.16.20.20
IP.1    = 172.16.20.20


生成包含 SAN 的证书
openssl genrsa -out server.key 2048生成证书请求 (CSR)
openssl req -new -key server.key -out server.csr -config openssl.cnf自签署证书并加入 SANopenssl x509 -req -in server.csr -signkey server.key -days 36500 -out server.crt -extensions v3_req -extfile openssl.cnf经过这次重新设置, 生效了, 主要是把原来的 证书全部删除然后生成chmod 777 server*

相关文章:

登陆harbor发现证书是错误的, 那么如何更新harbor的证书呢

Error response from daemon: Get "https://172.16.21.35/v2/": tls: failed to verify certificate: x509: certificate is valid for 127.0.0.1, ::1, 172.16.21.30, not 172.16.21.35 版本 v2.10.1-b7b88476 不需要从头看, 直接看最下面的成功的证书创建 这里面首…...

【Leetcode Top 100】199. 二叉树的右视图

问题背景 给定一个二叉树的 根节点 r o o t root root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 数据约束 二叉树的节点个数的范围是 [ 0 , 100 ] [0,100] [0,100] − 100 ≤ N o d e . v a l ≤ 100…...

React自学:如何使用localStorage,以及如何实现删除笔记操作

1. 初始化notes 以下这段代码完成了这些操作: 调用 localStorage.getItem("notes") 从浏览器的本地存储中获取名为 “notes” 的数据。使用 JSON.parse 将获取到的字符串解析成数组。如果本地存储中没有 “notes” 数据(返回值为 null&#…...

go语言使用websocket发送一条消息A,持续接收返回的消息

在Go语言中实现一个WebSocket客户端,可以使用gorilla/websocket这个非常流行的库来处理WebSocket连接。下面是一个简单的示例,展示了如何创建一个WebSocket客户端,向服务器发送消息"A",并持续接收来自服务器的响应。 首…...

如何对小型固定翼无人机进行最优的路径跟随控制?

控制架构 文章继续采用的是 ULTRA-Extra无人机,相关参数如下: 这里用于guidance law的无人机运动学模型为: { x ˙ p V a cos ⁡ γ cos ⁡ χ V w cos ⁡ γ w cos ⁡ χ w y ˙ p V a cos ⁡ γ sin ⁡ χ V w cos ⁡ γ w sin ⁡ χ…...

C++常见面试题-初级2

1. C和C有什么区别? C是面向对象的语言,而C是面向过程的语言;C引入new/delete运算符,取代了C中的malloc/free库函数;C引入引用的概念,而C中没有;C引入类的概念,而C中没有&#xff1…...

Spring Security 6 系列之二 - 基于数据库的用户认证和认证原理

之所以想写这一系列,是因为之前工作过程中使用Spring Security,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0,关键是其风…...

mfc140.dll是什么东西?mfc140.dll缺失的几种具体解决方法

mfc140.dll是Microsoft Foundation Classes(MFC)库中的一个动态链接库(DLL)文件,它是微软基础类库的一部分,为Windows应用程序的开发提供了丰富的类库和接口。MFC库旨在简化Windows应用程序的开发过程&…...

【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器

作为主设备写入多个线圈和寄存器 文章目录 作为主设备写入多个线圈和寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、写入多个线圈2.1 数据格式2.2 发送数据2.3 结果3、写入多个寄存器3.1 数据格式3.2 发送数据3.3 结果本文将实现STM32作为ModBus主…...

Windows安全中心(病毒和威胁防护)的注册

文章目录 Windows安全中心(病毒和威胁防护)的注册1. 简介2. WSC注册初探3. WSC注册原理分析4. 关于AMPPL5. 参考 Windows安全中心(病毒和威胁防护)的注册 本文我们来分析一下Windows安全中心(Windows Security Center…...

微积分复习笔记 Calculus Volume 2 - 4.2 Direction Fields and Numerical Methods

4.2 Direction Fields and Numerical Methods - Calculus Volume 2 | OpenStax...

深入理解旋转位置编码(RoPE)及其在大型语言模型中的应用

文章目录 前言一、 旋转位置编码原理1、RoPE概述2、 复数域内的旋转1、位置编码生成2、 应用位置编码二、RoPE的实现细节1、RotaryEmbedding类设计2、apply_rotary_pos_emb函数3、demo_apply_rotary_pos_emb函数三、完整RoPE代码Demo前言 随着自然语言处理(NLP)领域的快速发…...

内网穿透的应用-在OpenWrt上轻松搭建SFTP服务,安全传输文件不再难!

文章目录 前言1. 安装openssh-sftp-server2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT系统上安装SFTP服务,并结合cpolar内网穿透,创建安全隧道映射22端口,实现在公网环境下远程OpenWRT SFTP&#…...

【图像处理lec3、4】空间域的图像增强

目录 1. 空间域图像增强的背景与目标 2. 空间域处理的数学描述 3. 灰度级变换 4. 幂律变换(Power-Law Transformation) 5、 分段线性变换 Case 1: 对比度拉伸 Case 2: 灰度切片 Case 3: 按位切片 6、对数变换(Logarithmic Transform…...

【算法day13】二叉树:递归与回溯

题目引用 找树左下角的值路径总和从中序与后序遍历构造二叉树 今天就简简单单三道题吧~ 1. 找到树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 我们…...

上海亚商投顾:创业板指缩量下跌 多只高位股午后跌停

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整,创业板指领跌,高位股开始出现退潮,建设工业、星光股份、…...

单步调试Android Framework——App冷启动

纸上得来终觉浅,绝知此事要躬行。 —— [宋]陆游 基于aosp_cf_x86_64_phone-trunk_staging-eng , 下面是具体断点位置。 第一部分,桌面launcher进程 com.android.launcher3.touch.ItemClickHandler onClickonClickAppShortcutstartAppShor…...

统计一个目录下的文件及目录数量-linux010

要统计一个目录下的文件数量(包括子目录中的文件),可以使用以下命令: 1. 统计所有文件数量(包括子目录) 在终端中运行以下命令: find /path/to/directory -type f | wc -l 解释:…...

spring RestTemplate使用说明

rest-template是spring对httpclient的逻辑封装,它底层还是基于httpclient,所以一些配置其实跟httpclient是强相关的。 基本配置 rest-template可以不带参数,使用默认配置,也可以指定ClientHttpRequestFactory参数,Cl…...

thinkphp:try-catch捕获异常

使用简单的例子,实现了一个简单的try-catch捕获异常的实例 //开始事务Db::startTrans(); try{ //有异常抛出异常 if(存在错误){ throw new \Exception("异常信息"); } // 提交事务 Db::commit(); // 返回成功信息 ... } catch (\…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

什么是EULA和DPA

文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...