登录Harbor2.13.1,报unable to get PrivateKey from PEM type: PRIVATE KEY

发布于:2025-06-30 ⋅ 阅读:(14) ⋅ 点赞:(0)

1.环境

操作系统版本:Ubuntu 24.04.2 LTS

openssl的版本:3.0.15

Harbor版本:2.13.1  

2.现象

2.1登录报错

通过docker login 192.0.1.208:8443登录harbor时,报如下错误:

Error response from daemon: Get "https://192.0.1.208:8443/v2/": received unexpected HTTP status: 500 Internal Server Error

2.2harbor-core也报错

通过docker logs harbor-core查看错误:

Appending internal tls trust CA to ca-bundle ...

find: '/etc/harbor/ssl': No such file or directory

Internal tls trust CA appending is Done.

Appending trust CA to ca-bundle ...

 /harbor_cust_cert/harbor_internal_ca.crt Appended ...

2025-06-29T08:23:21Z [ERROR] [/core/service/token/token.go:50]: Unexpected error when creating the token, error: unable to get PrivateKey from PEM type: PRIVATE KEY

2025-06-29T08:40:59Z [INFO] [/core/main.go:109]: capture system signal terminated, to close "closing" channel

3.原因

     Harbor需要PKCS#1 格式私钥,而不是生成 PKCS#8 私钥。

     OpenSSL 3.0 中的行为已经发生了变化,它不再默认输出传统的 PKCS#1 格式(即 -----BEGIN RSA PRIVATE KEY-----),而是仍然输出了 PKCS#8 格式。

4.解决方案

你需要使用 -traditional 参数来强制 OpenSSL 使用传统格式输出 RSA 私钥,但在 OpenSSL 3.0 中,这个参数不能直接用在 rsa 命令上,而必须配合 pkey 工具一起使用。

1. 先生成一个 PKCS#8 格式的私钥

openssl genpkey -algorithm RSA -out harbor_private_key.pem -pkeyopt rsa_keygen_bits:4096

参数

含义

openssl genpkey

使用 OpenSSL 的 genpkey 子命令来生成一个私钥(支持多种算法)

-algorithm RSA

指定使用 RSA 算法生成密钥

-out harbor_private_key.pem

输出私钥到文件 harbor_private_key.pem

-pkeyopt rsa_keygen_bits:4096

设置 RSA 密钥长度为 4096 位(比默认的 2048 更安全)

2. 将其转换为 PKCS#1 格式(注意这里使用 -traditional 参数)

openssl pkey -in harbor_private_key.pem -out private_key.pem -traditional

参数

含义

openssl pkey

使用 OpenSSL 的 pkey 子命令处理私钥。它可以读取、写入和转换各种格式的私钥。

-in harbor_private_key.pem

指定输入的私钥文件路径。这个文件通常是一个 PKCS#8 格式的私钥文件。

-out private_key.pem

指定输出的私钥文件路径。转换后的私钥将以指定路径保存。

-traditional

强制 OpenSSL 输出传统格式的私钥(即 PKCS#1 格式)。对于 RSA 密钥,这意味着输出将以 -----BEGIN RSA PRIVATE KEY----- 开头。

3.查看格式

head -n 1 private_key.pem

4.拷贝private_key.pem到对应文件夹。

 cp private_key.pem /app/harbor/data/secret/core/

注:具体拷贝到那个目录,对应docker-compose.yml配置

5.给harbor权限

 chown -R 10000:10000 /app/harbor/data/secret/core

6.再执行docker login 192.0.1.208:8443


网站公告

今日签到

点亮在社区的每一天
去签到