我正在为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罐子吗?”。 否则“如何传递这个海绵堡变量?”
答案 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的独立替代品。但是,我确实发现了这一点:
这可能有用。