使用 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);
我正在尝试使用 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);