0

我正在尝试使用 JSCEP 向 EJBCA 注册证书签名请求,如此处所述: https ://github.com/jscep/jscep

我可以使用相同格式的 csr 和私钥(用于端口 8443 上的 ssl 授权)从 Web 控制台提交 csr,但是当我通过 JSCEP 尝试时,我在 EJBCA 日志中收到以下错误:

处理 SCEP 请求时出错。:org.cesecore.certificates.ca.SignRequestExcept ion:请求中没有密码。

我猜它想要一个终端实体的用户名和注册代码,就像我需要通过 Web UI 输入的那个一样,但我在 JSCEP API 中完全看不到输入该信息的地方。也许私钥就足够了,但这似乎有点奇怪,因为 UI 想要两者兼而有之。

我想这也可能意味着我的 CSR 必须有密码,但它没有,但 UI 并没有给我带来问题,所以我不明白为什么会这样。

密钥库(从 p12 文件中解析,包含密码)和 csr 都是从文件中解析出来的,而不是以编程方式生成的。csr 来自我没有密钥的第三方。

我通过 jscep 客户端的注册请求如下所示:

client.enrol(证书,privateKey,请求,config.getCaProfile());

证书和私钥都取自 p12 文件,请求是从传递给我的 csr (pkcs12) 中解析的。caProfile 是 https::8443/ejbca/adminweb/ 主页上的表格中列出的 CA 名称

如果我的参数有误,或者我需要在某处包含密码,请告诉我,我该如何在 API 中做到这一点。

4

1 回答 1

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);
于 2016-10-28T17:39:41.183 回答