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