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

news2024/12/19 22:45:45

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.4

wget 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/openssl

make

make install

mv /usr/bin/openssl /usr/bin/openssl_bak
mv /usr/include/openssl /usr/include/openssl_bak

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
 
ln -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.3

sudo 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/harbor

sudo docker-compose down

sudo 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.1
    container_name: nginx
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - NET_BIND_SERVICE
    volumes:
      - ./common/config/nginx:/etc/nginx:z
      - /mnt/registry/secret/cert:/etc/cert:z
      - type: bind
        source: ./common/config/shared/trust-certificates
        target: /harbor_cust_cert
    networks:
      - harbor
    ports:
      - 3880:8080
      - 443:8443
    depends_on:
      - registry
      - core
      - portal
      - log
    logging:
      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.csr

A 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/harbor

sudo docker-compose down

sudo docker-compose up -d

# 对于 Linux 客户端
将文件 /mnt/registry/secret/cert/server.crt 上传至 172.16.21.35:/etc/ssl/certs

mv server.crt 172.16.20.20.server.crt

然后更新
sudo update-ca-certificates



openssl 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.html

curl 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.crt



curl --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.20

openssl x509 -req -in server.csr -signkey server.key -out server.cert


sudo 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


自签署证书并加入 SAN

openssl x509 -req -in server.csr -signkey server.key -days 36500 -out server.crt -extensions v3_req -extfile openssl.cnf

经过这次重新设置, 生效了, 主要是把原来的 证书全部删除然后生成


chmod 777 server*



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt-C++笔记之自定义类继承自 `QObject` 与 `QWidget` 及开发方式详解

qt-C笔记之自定义类继承自 QObject 与 QWidget 及开发方式详解 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QW…

Elastic 8.17:Elasticsearch logsdb 索引模式、Elastic Rerank 等

作者:来自 Elastic Brian Bergholm 今天,我们很高兴地宣布 Elastic 8.17 正式发布! 紧随一个月前发布的 Elastic 8.16 之后,我们将 Elastic 8.17 的重点放在快速跟踪关键功能上,这些功能将带来存储节省和搜索性能优势…

[C++]类的继承

一、什么是继承 1.定义: 在 C 中,继承是一种机制,允许一个类(派生类)继承另一个类(基类)的成员(数据和函数)。继承使得派生类能够直接访问基类的公有和保护成员&#xf…

Docker 用法详解

文章目录 一、Docker 快速入门1.1 部署 MYSQL1.2 命令解读: 二、Docker 基础2.1 常见命令:2.1.1 命令介绍:2.1.2 演示:2.1.3 命令别名: 2.2 数据卷:2.2.1 数据卷简介:2.2.2 数据卷命令&#xff…

【自动化】Python SeleniumUtil 油猴 工具 自动安装用户脚本

【自动化】Python SeleniumUtil 油猴 工具 【自动化】Python SeleniumUtil 工具-CSDN博客【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565691 油猴工具 import timefrom selenium.webdriver.support.wait import WebDriverW…

盛元广通畜牧与水产品检验技术研究所LIMS系统

一、系统概述 盛元广通畜牧与水产品检验技术研究所LIMS系统集成了检测流程管理、样品管理、仪器设备管理、质量控制、数据记录与分析、合规性管理等功能于一体,能够帮助实验室实现全流程的数字化管理。在水产、畜牧产品的质检实验室中,LIMS系统通过引入…

clickhouse-数据库引擎

1、数据库引擎和表引擎 数据库引擎默认是Ordinary,在这种数据库下面的表可以是任意类型引擎。 生产环境中常用的表引擎是MergeTree系列,也是官方主推的引擎。 MergeTree是基础引擎,有主键索引、数据分区、数据副本、数据采样、删除和修改等功…

GEE+本地XGboot分类

GEE本地XGboot分类 我想做提取耕地提取,想到了一篇董金玮老师的一篇论文,这个论文是先提取的耕地,再做作物分类,耕地的提取代码是开源的。 但这个代码直接在云端上进行分类,GEE会爆内存,因此我准备把数据下…

Docker搭建kafka环境

系统:MacOS Sonoma 14.1 Docker版本:Docker version 27.3.1, build ce12230 Docker desktop版本:Docker Desktop 4.36.0 (175267) 1.拉取镜像 先打开Docker Desktop,然后在终端执行命令 docker pull lensesio/fast-data-dev …

校园点餐订餐外卖跑腿Java源码

简介: 一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合&am…

Linux文件属性 --- 硬链接、所有者、所属组

三、硬链接数 1.目录 使用“ll”命令查看,在文件权限的后面有一列数字,这是文件的硬链接数。 对于目录,硬链接的数量是它具有的直接子目录的数量加上其父目录和自身。 下图的“qwe”目录就是“abc”目录的直接子目录。 2.文件 对于文件可…

Centos7 部署ZLMediakit

1、拉取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init 2、安装编译器 sudo yum -y install gcc 3、安装cmake sudo yum -y install cmake 4…

无管理员权限 LCU auth-token、port 获取(全网首发 go)

一: 提要: 参考项目: https://github.com/Zzaphkiel/Seraphine 想做一个 lol 查战绩的软件,并且满足自己的需求(把混子和大爹都表示出来),做的第一步就是获取 lcu token ,网上清一色…

《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制

从本节课程开始,我们将来介绍K8s安全框架,这是保障K8s集群安全比较关键的安全机制。接下来,让我们一起来探索K8s安全框架的运行机制。 在这个课程中,我们将学习以下内容: K8s安全框架:由认证、鉴权和准入控…

spring\strust\springboot\isp前后端那些事儿

后端 一. 插入\更新一条数据&#xff08;老&#xff09; Map<String, Object> parameterMap MybatisUtil.initParameterSave("Send_ProjectFrozenLog", sendProjectFrozenLog); commonMapper.insert(parameterMap);parameterMap MybatisUtil.initParameter…

UE5安装Fab插件

今天才知道原来Fab也有类似Quixel Bridge的插件&#xff0c;于是立马就安装上了&#xff0c;这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎&#xff0c;在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…

对于使用exe4j打包,出现“NoClassDefFoundError: BOOT-INF/classes”的解决方案

jar使用exe4j打包exe&#xff0c;出现NoClassDefFoundError: BOOT-INF/classes 注意选取的jar包是使用build&#xff0c;而不是maven中的install 本文介绍解决这个方法的方案 点击Project Structure 按照如图所示选择 选择main class&#xff0c;选择你要打的main 如果遇到/M…

文件上传之文件内容检测

一.基本概念 介绍&#xff1a;文件内容检测就是检测上传的文件里的内容。 文件幻数检测 通常情况下&#xff0c;通过判断前10个字节&#xff0c;基本就能判断出一个文件的真实类型。 文件加载检测 一般是调用API或函数对文件进行加载测试。常见的是图像渲染测试&#xff0c;再…

WebSpoon9.0(KETTLE的WEB版本)编译 + tomcatdocker部署 + 远程调试教程

前言 Kettle简介 Kettle是一款国外开源的ETL工具&#xff0c;纯Java编写&#xff0c;可以在Window、Linux、Unix上运行&#xff0c;绿色无需安装&#xff0c;数据抽取高效稳定 WebSpoon是Kettle的Web版本&#xff0c;由Kettle社区维护&#xff0c;不受Pentaho支持&#xff0c;…

搭建Tomcat(三)---重写service方法

目录 引入 一、在Java中创建一个新的空项目&#xff08;初步搭建&#xff09; 问题&#xff1a; 要求在tomcat软件包下的MyTomcat类中编写main文件&#xff0c;实现在MyTomcat中扫描myweb软件包中的所有Java文件&#xff0c;并返回“WebServlet(url"myFirst")”中…