OpenSSL V3.0.0 是否与 V1.1.1 兼容

Nic*_*las 6 ssl openssl keytool

我需要创建一个 jave 密钥库,因此我下载了最新版本的 openssl 但不断收到:

keytool error: java.io.IOException: keystore password was incorrect

如果我尝试导入 .p12,Windows 也会告诉我密码错误。经过几个小时的努力,我终于下载了 v1.1.1,POW 一切正常了!

问题解决了!但为什么 - 为什么 OpenSSL v3.0.0 不像 v1.1.1 那样工作?

C:\openssl3> openssl pkcs12 -export -name tomcat -in cert.cer -inkey key -out ks300.p12
C:\openssl3> openssl pkcs12 -info -in ks300.p12
Enter Import Password:
<works fine>
...
</works fine>
C:\openssl3> keytool -list -v -keystore ks300.p12
Enter keystore password:
keytool error: java.io.IOException: keystore password was incorrect
java.io.IOException: keystore password was incorrect
...
Caused by: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
        ... 6 more
Run Code Online (Sandbox Code Playgroud)

然后:

C:\openssl1.1.1> openssl pkcs12 -export -name tomcat -in cert.cer -inkey key -out ks111.p12
C:\openssl1.1.1> openssl pkcs12 -info -in ks111.p12
<works fine />
C:\openssl1.1.1> keytool -list -v -keystore ks111.p12
Enter keystore password:
<works fine />

C:\openssl1.1.1> C:\openssl3\openssl pkcs12 -info -in ks111.p12
Enter Import Password:
MAC: sha1, Iteration 2048
MAC length: 20, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Error outputting keys and certificates
5C200000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:crypto\evp\evp_fetch.c:346:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()

C:\openssl1.1.1>openssl pkcs12 -info -in ks300.p12
<works fine>
Run Code Online (Sandbox Code Playgroud)

现在,最后一个让我感到惊讶,因为我正在收集这篇文章的输出,但是是的,openssl1.1.1 可以很好地读取 openssl3 .p12 文件,但不能以其他方式读取(openssl3 无法读取 openssl1.1.1 .p12)。keytool 和 windows 一直抱怨 openssl3 .p12 的密码——但可以读取 v1.1.1 的密码。

是否有一些我错过的向下兼容性选项。

我似乎是互联网上唯一遇到此问题的人,这通常意味着我做错了什么。

其他一些数据点:

C:\> Java --version
openjdk 11.0.2 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

C:\openssl3>openssl version
OpenSSL 3.0.0 7 sep 2021 (Library: OpenSSL 3.0.0 7 sep 2021)

C:\openssl1.1.1>openssl version
OpenSSL 1.1.1l  24 Aug 2021
Run Code Online (Sandbox Code Playgroud)