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

CentOS HTTPS自签证书访问失败问题的排查与解决全流程

sudo cp harbor.crt /usr/local/share/ca-certificates/sudo yum install -y ca-certificatessudo update-ca-trust force-enablesudo update-ca-trust extract

但是访问 https://172.16.20.20 仍然报错 * About to connect() to 172.16.20.20 port 443 (#0) * Trying 172.16.20.20... * Connected to 172.16.20.20 (172.16.20.20) port 443 (#0) * Initializing NSS with certpath: sql:/etc/pki/nssdb * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * Server certificate: * subject: CN=registry-1.docker.io,L=NanJing,ST=JiangSu,C=CN * start date: Dec 20 08:54:50 2024 GMT * expire date: Nov 26 08:54:50 2124 GMT * common name: registry-1.docker.io * issuer: CN=registry-1.docker.io,L=NanJing,ST=JiangSu,C=CN * NSS error -8156 (SEC_ERROR_CA_CERT_INVALID) * Issuer certificate is invalid. * Closing connection 0 curl: (60) Issuer certificate is invalid. More details here: http://curl.haxx.se/docs/sslcerts.html curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.

根据你提供的信息,问题可能出在以下几个方面:

问题分析

  1. 证书未正确安装: 证书复制到了 /usr/local/share/ca-certificates 后,需要更新 CA 信任链,但可能存在以下问题:

    • 文件扩展名需为 .crt 才能被正确识别。
    • sudo update-ca-trust extract 是否成功执行。
  2. 证书的域名或 IP 不匹配: 你的证书的 common name (CN) 为 registry-1.docker.io,而你尝试访问的是 https://172.16.20.20,域名和 IP 不匹配可能导致证书验证失败。

  3. 证书链不完整或签发机构问题: 如果证书的签发机构未被系统信任,或证书链中缺少中间证书,也会导致 SEC_ERROR_CA_CERT_INVALID 错误。

  4. NSS 库的问题: CentOS 使用 NSS 库验证证书,可能存在特定配置导致问题。[最终确定是这个问题, 最后一步解决了此问题]


解决步骤

1. 确保证书正确安装

执行以下命令:

sudo cp harbor.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extract

这会将证书添加到系统信任链。

然后检查证书是否已被信任:

openssl x509 -in harbor.crt -text -noout
sudo grep "subject=" /etc/pki/tls/certs/ca-bundle.crt | grep "CN=registry-1.docker.io"

如果找不到对应的 CN 信息,说明证书未正确安装。


2. 使用正确的域名访问

修改 /etc/hosts 文件,将域名指向 IP 地址,确保域名和证书匹配:

sudo vi /etc/hosts

添加以下内容:

172.16.20.20  registry-1.docker.io

然后重新访问:

curl https://registry-1.docker.io

3. 检查证书链

验证证书的完整性:

openssl verify -CAfile harbor.crt harbor.crt

如果提示证书链不完整,可能需要下载并合并中间证书。例如:

cat harbor.crt intermediate.crt > fullchain.crt

然后重新复制到 /etc/pki/ca-trust/source/anchors/ 并更新信任链。


4. 调试和验证

尝试使用 curl 调试:

curl -v --cacert harbor.crt https://172.16.20.20

如果继续失败,可以临时使用 -k 忽略验证(仅供测试):

curl -k https://172.16.20.20

5. 检查 NSS 数据库

如果问题依旧,可以重置 NSS 数据库:

sudo mv /etc/pki/nssdb /etc/pki/nssdb_bak
sudo rm -rf /etc/pki/nssdb
sudo mkdir /etc/pki/nssdb
sudo certutil -N -d sql:/etc/pki/nssdb
sudo certutil -A -d sql:/etc/pki/nssdb -n "harbor" -t "C,," -i harbor.crt

验证 NSS 配置:

cat harbor.crt harbor.key > harbor.pemcurl --cert harbor.pem https://172.16.20.20

通过以上步骤,问题应能解决。如果仍然报错,可以提供更多详细日志或上下文以便进一步分析。

如果还是解决不了问题, 使用 curl-config --ca 查看使用哪个路径的证书, 或者使用 curl https://172.16.20.20 --verbose 查看调用证书的路径明细, 直接将我们的证书写入实际使用的证书即可, 比如 实际使用的证书路径是 /etc/ssl/certs/ca-certificates.crt

那么使用如下命令追加证书

cat harbor.crt >> /etc/ssl/certs/ca-certificates.crt


http://www.mrgr.cn/news/81173.html

相关文章:

  • Windows 11 安装 Dify 完整指南 非docker环境
  • 初学stm32 --- PWM输出
  • 常用网络协议简述
  • 【Rust自学】4.4. 引用与借用
  • MES系统工作流的单元测试方案
  • 从零开始k8s-部署篇
  • SpringCloud 运用(2)—— 跨服务调度
  • 访谈积鼎科技总经理:国产CFD软件发展与未来趋势展望
  • GitCode 光引计划投稿|JavaVision:引领全能视觉智能识别新纪元
  • Centos7安装k8s集群
  • node.js的异步工作之---回调函数与回调地狱
  • Pandas系列|第三期:Pandas中访问数据
  • 2024年A股最新退市规则
  • linux上抓包RoCEv2
  • Day1 苍穹外卖前端 Vue基础、Vue基本使用方式、Vue-router、Vuex、TypeScript
  • 【学术小白的学习之路】基于情感词典的中文句子情感分析(代码词典获取在结尾)
  • FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
  • YoloV8改进策略:Head改进|DynamicHead,利用注意力机制统一目标检测头部|即插即用
  • sqlite 自定以脚本解释器
  • 时空信息平台架构搭建:基于netty封装TCP通讯模块(IdleStateHandler网络连接监测,处理假死)
  • UE5 渲染管线 学习笔记
  • 【Rust自学】6.1. 定义枚举
  • 设计模式七大原则
  • idea2024创建JavaWeb项目以及配置Tomcat详解
  • 达梦数据库-单机部署
  • Nvidia环境配置again—cuda、cudnn、TensorRT