在 Windows Server 2012 上导入证书失败

问题描述

我有一个 p12 文件 (RS256),当我在 Windows 10 上通过证书导入向导打开并按照步骤操作时,Windows 可以使用密码读取该文件,但是当它移动到 Windows Server 2012 r2 并执行相同的步骤时, windows 无法读取文件,因为输入的密码不正确。请帮忙,为什么我无法将 p12 导入 windows server 2012 r2

Certificate Import Wizard

更新

在 windows 10 上使用 keytool 从 jks 文件转换的 p12 文件,我尝试在 windows server 2012 上重新转换它,但仍然无法读取文件,因为密码不正确(我很确定密码输入正确),你能建议我如何正确地将 jks 文件转换为 p12 与 sha256withRSA 在 windows server 2012 r2 上运行吗?

此命令生成成功但导入失败:

keytool -importkeystore -srckeystore e:\file.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore e:\file.p12 -sigalg RS256
keytool -importkeystore -srckeystore e:\file.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore e:\file.p12 -sigalg sha256withRSA

解决方法

最可能的原因是您的 PFX 在内部使用了 Windows 10 中添加的新加密选项。

如果您通过 ASN.1 解码器(例如 https://lapo.it/asn1js/certutil -asn 命令)运行 PFX,您希望看到类似的内容

C:\>certutil -asn sample.pfx
0000: 30 82 0e a9                               ; SEQUENCE (ea9 Bytes)
0004:    02 01                                  ; INTEGER (1 Bytes)
0006:    |  03
0007:    30 82 0e 65                            ; SEQUENCE (e65 Bytes)
000b:    |  06 09                               ; OBJECT_ID (9 Bytes)
000d:    |  |  2a 86 48 86 f7 0d 01 07  01
         |  |     ; 1.2.840.113549.1.7.1 PKCS 7 Data
0016:    |  a0 82 0e 56                         ; OPTIONAL[0] (e56 Bytes)
001a:    |     04 82 0e 52                      ; OCTET_STRING (e52 Bytes)
001e:    |        30 82 0e 4e                   ; SEQUENCE (e4e Bytes)
0022:    |           30 82 06 0f                ; SEQUENCE (60f Bytes)
0026:    |           |  06 09                   ; OBJECT_ID (9 Bytes)
0028:    |           |  |  2a 86 48 86 f7 0d 01 07  01
         |           |  |     ; 1.2.840.113549.1.7.1 PKCS 7 Data
0031:    |           |  a0 82 06 00             ; OPTIONAL[0] (600 Bytes)
0035:    |           |     04 82 05 fc          ; OCTET_STRING (5fc Bytes)
0039:    |           |        30 82 05 f8       ; SEQUENCE (5f8 Bytes)
003d:    |           |           30 82 05 f4    ; SEQUENCE (5f4 Bytes)
0041:    |           |              06 0b       ; OBJECT_ID (b Bytes)
0043:    |           |              |  2a 86 48 86 f7 0d 01 0c  0a 01 02
         |           |              |     ; 1.2.840.113549.1.12.10.1.2 szOID_PKCS_12_PKCS8ShroudedKeyBag
004e:    |           |              a0 82 04 fe ; OPTIONAL[0] (4fe Bytes)
0052:    |           |              |  30 82 04 fa      ; SEQUENCE (4fa Bytes)
0056:    |           |              |     30 1c ; SEQUENCE (1c Bytes)
0058:    |           |              |     |  06 0a      ; OBJECT_ID (a Bytes)
005a:    |           |              |     |  |  2a 86 48 86 f7 0d 01 0c  01 03
         |           |              |     |  |     ; 1.2.840.113549.1.12.1.3 szOID_PKCS_12_pbeWithSHA1And3KeyTripleDES
0064:    |           |              |     |  30 0e      ; SEQUENCE (e Bytes)
0066:    |           |              |     |     04 08   ; OCTET_STRING (8 Bytes)
(it keeps going)

也就是说,有一个 1.2.840.113549.1.12.10.1.2 (PKCS#12 PKCS8ShroudedKeyBag),其中包含一个项目 1.2.840.113549.1.12.1.3 (PKCS#12 pbeWithSHA1)。

我猜您的 PFX 有一个 PKCS8ShroudedKeyBag,其中包含一个项目 1.2.840.113549.1.5.13(基于密码的加密方案 2 / PBES2)...首先在 Windows 10 上受支持。