rsaJsonWebKey.toJson 在启用 FIPS 的主机上抛出 ClassCastException

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

在启用 FIPS 的主机上运行以下代码时,Jose4j 0.9.4 及之前版本会在 toJson 方法上引发 ClassCastException。 如果您在主机上禁用 FIPS,则相同的代码不会引发错误。 我们使用 CentOs Stream 8 进行测试,并使用“fips-mode-setup --enable”命令启用 FIPS。

RsaJsonWebKey rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);
rsaJsonWebKey.setAlgorithm("RS256");
rsaJsonWebKey.setKeyId("authServer");
rsaJsonWebKey.toJson(JsonWebKey.OutputControlLevel.INCLUDE_PRIVATE);

有问题的行是 org.jose4j.jwk.RsaJsonWebKey.getRsaPrivateKey(RsaJsonWebKey.java:124) ,内容如下:

  return (RSAPrivateKey) privateKey;

启用 FIPS 时,“privateKey”是“sun.security.pkcs11.P11Key$P11PrivateKey” (SunPKCS11-NSS-FIPS RSA 私钥,2048 位会话对象,敏感,可提取)并且它不会转换为 RSAPrivateKey

未启用 FIPS 时,“privateKey”是“sun.security.rsa.RSAPrivateCrtKeyImpl” (SunRsaSign RSA 私有 CRT 密钥,2048 位),它将转换为 RSAPrivateKey

谢谢, 迪米尔团队

我们希望在启用或不启用 FIPS 的情况下运行时都不会出现异常。

fips jose4j
1个回答
0
投票

看起来 jose4j 的 JWK 功能不支持在此 FIPS 模式下输出 RSA 私钥的参数。是否应该是一个不同/更大的问题。它确实在那里说“可提取”,但我想说的是,通常在 FIPS 环境中,您无论如何都不希望以 JSON 形式对原始私钥进行编码。将最后一行更改为

rsaJsonWebKey.toJson(JsonWebKey.OutputControlLevel.PUBLIC_ONLY)
将仅输出公钥参数并避免异常。并且可以使用
rsaJsonWebKey.getPrivateKey()
访问私钥对象。

© www.soinside.com 2019 - 2024. All rights reserved.