最基本的例子:
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
public class NoSuchFieldDemo {
public static void main(String[] args) {
JcaContentSignerBuilder builder = new JcaContentSignerBuilder("SHA384withECDSA");
}
}
抛出:
线程“ main”中的异常java.lang.NoSuchFieldError:qTESLA_I
在org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder中。(未知来源)
在org.bouncycastle.operator.jcajce.JcaContentSignerBuilder中。(未知来源)
在NoSuchFieldDemo.main(NoSuchFieldDemo.java:5)
PS#1:包括有点“神奇”的字符串"SHA384withECDSA"
的代码来自"The Bouncy Castle FIPS Java API in 100 Examples"。
PS#2:在添加BouncyCastleFipsProvider
作为最喜欢的安全提供程序之后,这种情况仍然存在:
// position is 1-based:
final int mostPreferredPosition = 1;
final int actualPosition = Security.insertProviderAt(new BouncyCastleFipsProvider(), mostPreferredPosition);
PS#3:在重要的情况下,我将使用AdoptOpenJDK 11.0.3 + 7在Ubuntu 18.04上
我想这是最明显的,但是我在做什么错了?
我的班级路径上有bcpkix-jdk15on
,以便拥有JcaContentSignerBuilder
。 @ george-stanchev建议这可能会干扰..?
答案 0 :(得分:2)
确保您的类路径中没有非FIPS罐子。如果您使用非FIPS bcpkix和FIPS bcprov,则会发生这种情况。非FIPS bcpkix静态尝试添加bcprov中定义的qTESLA算法,但是FIPS bcprov没有定义的算法,因此是例外。