JSCEP-错误的第三个参数类型。找到:“ org.spongycastle.pkcs.PKCS10CertificationRequest”,必需:“ org.bouncycastle.pkcs.PKCS10CertificationRequest”

时间:2019-06-11 12:50:43

标签: java bouncycastle spongycastle scep jscep

我正在为Android实现Jscep。最初,我为Java尝试了Jscep,并且运行良好。现在在Android中,我使用SpongyCastle而不是BouncyCastle。现在我的问题是Client类的enroll方法正在使用BouncyCastle。因此,当我尝试传递参数时,海绵堡和充气城堡不适合(很明显)。

以下内容扩展了海绵堡。

        PKCS10CertificationRequestBuilder crb = generateCSR(keyPair,entity);

我将上述变量'crb'作为第三个参数传递给enroll方法,如下所示。

try {
            response = client.enrol(cert, keyPair.getPrivate(), crb.build(getContentSigner(keyPair)), "MDM-ROOT-CA");
        } 

我收到以下错误。 “错误的第三个参数类型。找到:'org.spongycastle.pkcs.PKCS10CertificationRequest',必填:'org.bouncycastle.pkcs.PKCS10CertificationRequest”。

我尝试扩展Client,但已声明为final。

我的问题是“我应该切换回BouncyCastle罐子吗?”。 否则“如何传递这个海绵堡变量?”

1 个答案:

答案 0 :(得分:0)

  

我的问题是“我应该切换回BouncyCastle罐子吗?”。否则“如何传递这个海绵堡变量?”

可能都不能在所有Android平台上使用

从我所见,Jscep与(真正的)BouncyCastle而非SpongyCastle一起使用。

如果我正确阅读了this old issue,则说明3.0之前的Android中的BouncyCastle的简化版本缺少Jscep所需的功能。

  • 对于3.0之前的Android,这似乎不是一个可行的解决方案。您不能仅仅告诉Java将这两种类型视为等效。它将破坏JVM / Davlik运行时类型系统。

  • 根据this StackOverflow Q&A,在3.0版中,Android在其简化的BouncyCastle上更改了Java包名称。这意味着您应该能够将正版BouncyCastle JAR与3.0+ Android应用程序捆绑在一起。这足以使Jscep在该平台上工作。

    这个SpongyCastle issue comment说,让Android使用真正的BouncyCastle功能的诀窍是:

      

    ...在致电Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME)之前先致电Security.addProvider(new BouncyCastleProvider())删除内置BC。

  • 从理论上讲,应该可以将Jscep移植为使用SpongyCastle,但是没有明确的迹象表明有人成功完成了 。 (与以前相比,仅此端口的需求正在减少。)

此外,我找不到适用于Android的Jscep的独立替代品。但是,我确实发现了这一点:

这可能有用。