使用JSCEP向CSR注册CSR时如何包含密码

时间:2016-10-23 20:07:53

标签: ejbca jscep

我正在尝试使用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中执行此操作。

1 个答案:

答案 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);