使用 JSCEP 将 CSR 注册到 EJBCA 时如何包含密码

How to include password when enrolling CSR to EJBCA using JSCEP

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

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

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

我猜它想要一个终端实体的用户名和注册码,就像我需要通过网络输入的实体 UI,但我在 JSCEP 中绝对看不到任何地方 API 输入该信息。也许私钥就足够了,但这似乎有点奇怪,因为 UI 两者都想要。

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

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

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

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

证书和私钥都取自p12文件,请求是从传递给我的csr(pkcs12)中解析出来的。 caProfile 是 https::8443/ejbca/adminweb/

主页上 table 中列出的 CA 名称

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

我现在可以为一个以编程方式构造的 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);