我正在尝试使用JSCEP向EJBCA注册证书签名请求,如下所示: https://github.com/jscep/jscep
我可以使用相同格式的csr和私钥从Web控制台提交csr(对于端口8443上的ssl授权),但是当我通过JSCEP尝试时,我在EJBCA日志中收到以下错误:
处理SCEP请求时出错:org.cesecore.certificates.ca.SignRequestExcept ion:请求中没有密码。
我猜它想要一个终端实体的用户名和注册码,就像我需要通过网络用户界面输入的那样,但我看到在JSCEP API中绝对没有输入该信息。也许私钥是足够的,但这似乎有点奇怪,因为UI想要两者。
我想这也可能意味着我的CSR必须有一个密码,但它没有,但UI没有给我一个问题所以我不明白为什么会这样。
密钥库(从p12文件解析,包含密码)和csr都是从文件解析而不是以编程方式生成。 csr来自第三方,我没有钥匙。
我通过jscep客户端的注册请求如下所示:
client.enrol(certificate,privateKey,request,config.getCaProfile());
证书和私钥都来自p12文件,请求从传递给我的csr(pkcs12)中解析。 caProfile是https :: 8443 / ejbca / adminweb /
主页上的表中列出的CA名称如果我的参数错误或者我需要在某处包含密码,请告诉我。如何在API中执行此操作。
答案 0 :(得分:3)
我现在能够以编程方式构建csr并且它端到端地工作,因此我考虑将问题关闭。我仍然有一些工作要使用第三方csr,但这不应该是一个大问题。
代码如下。
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair entityKeyPair = keyPairGenerator.genKeyPair();
PublicKey entityPubKey = entityKeyPair.getPublic();
X500Principal requesterSubject = new X500Principal("CN=endEntityName");
PKCS10CertificationRequestBuilder csrBuilder = new JcaPKCS10CertificationRequestBuilder(requesterSubject, entityPubKey);
DERPrintableString password = new DERPrintableString("endEntityPassword");
csrBuilder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_challengePassword, password);
PrivateKey entityPrivKey = entityKeyPair.getPrivate();
JcaContentSignerBuilder csrSignerBuilder = new JcaContentSignerBuilder("SHA1withRSA");
ContentSigner csrSigner = csrSignerBuilder.build(entityPrivKey);
PKCS10CertificationRequest csr = csrBuilder.build(csrSigner);