openssl:将 PFX 导出到 PEM 并返回

问题描述 投票:0回答:1

我无法从导出的

.pfx
获取有效的
.pem
文件。我已经阅读了有关转换的各种问题,但它们都以任一方向处理,而不是同时处理。

德国税务网站“Elster”使用

.pfx
证书文件进行登录。您可以在网站上的表格上提供文件和相关密码。我希望能够将证书备份为纯文本,而不是二进制文件,所以我想到了
pkcs12
。我尝试导出到
.pem
文件,这似乎工作正常,但是当我使用导出的文件来测试我的备份并从中写回
.pfx
时,该网站不接受我的登录(“密码无效”)证书文件”)。

我编写了一个简单的 bash 脚本来说明我的想法。
(看来我必须使用

-legacy
参数,否则我的openSSL(3.1.1)会抱怨不支持的格式。)

#!/bin/bash

pfxfile="./original.pfx"
pemfile="./export.pem"
pass="abc123"

# convert to PEM
openssl pkcs12 -in "$pfxfile" -legacy -passin pass:"$pass" -nodes -out "$pemfile"

# convert back to PFX
openssl pkcs12 -in "$pemfile" -legacy -export -passout pass:"$pass" -out "./restored.pfx"

我尝试将密钥、客户端证书和 CA 证书导出到单独的文件,这将是我的首选设置,但它也不起作用。 我知道如果没有实际的

.pfx
文件,很难重现,但由于明显的原因我无法提供它。我希望有人会看到一个简单的错误并且有一个简单的修复方法。我怀疑这与遗留格式有关,但无法进一步调查。

如有任何帮助,我们将不胜感激!

编辑:

当我显示原始和新

.pfx
文件的信息时,结果有很大不同。有没有办法生成新文件以更接近原始文件?

原版.pfx

MAC: sha1, Iteration 6000
MAC length: 20, salt length: 20
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 6000
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 6000
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 6000
Certificate bag
Certificate bag
Certificate bag
Certificate bag
Certificate bag
Certificate bag

已恢复.pfx

MAC: sha256, Iteration 2048
MAC length: 32, salt length: 8
PKCS7 Encrypted data: PBES2, PBKDF2, AES-256-CBC, Iteration 2048, PRF hmacWithSHA256
Certificate bag
Certificate bag
Certificate bag
Certificate bag
Certificate bag
Certificate bag
PKCS7 Data
Shrouded Keybag: PBES2, PBKDF2, AES-256-CBC, Iteration 2048, PRF hmacWithSHA256
bash openssl pem pfx pkcs#12
1个回答
0
投票

您面临的问题似乎与原始和恢复的

.pfx
文件中使用的加密和哈希算法有关。
openssl pkcs12
命令在不同版本中使用不同的默认加密算法和
MAC
(消息验证码)。您的原始
.pfx
文件使用
SHA1
TripleDES
,而恢复的文件则使用
SHA256
AES-256
这种不匹配可能会导致 Elster 网站拒绝恢复的
.pfx
文件。

要解决此问题,您可以在转换回

.pfx
时指定加密和 MAC 算法,以匹配原始文件的算法。以下是修改脚本的方法:

#!/bin/bash

pfxfile="./original.pfx"
pemfile="./export.pem"
restoredfile="./restored.pfx"
pass="abc123"

# Convert to PEM
openssl pkcs12 -in "$pfxfile" -legacy -passin pass:"$pass" -nodes -out "$pemfile"

# Convert back to PFX with specific algorithms to match the original
openssl pkcs12 -in "$pemfile" -legacy -export -passout pass:"$pass" -out "$restoredfile" \
    -macalg sha1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -descert

# The above command uses SHA1 for MAC, TripleDES for key and cert encryption.
© www.soinside.com 2019 - 2024. All rights reserved.