- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我找不到任何描述如何使用 BC 签署 CSR 的代码/文档。作为输入,我有一个 CSR 作为字节数组,并希望获得 PEM 和/或 DER 格式的证书。
我已经走到这一步了
def signCSR(csrData:Array[Byte], ca:CACertificate, caPassword:String) = {
val csr = new PKCS10CertificationRequestHolder(csrData)
val spi = csr.getSubjectPublicKeyInfo
val ks = new java.security.spec.X509EncodedKeySpec(spi.getDEREncoded())
val kf = java.security.KeyFactory.getInstance("RSA")
val pk = kf.generatePublic(ks)
val (caCert, caPriv) = parsePKCS12(ca.pkcs12data, caPassword)
val fromDate : java.util.Date = new java.util.Date // FixMe
val toDate = fromDate // FixMe
val issuer = PrincipalUtil.getIssuerX509Principal(caCert)
val contentSigner = new JcaContentSignerBuilder("SHA256WithRSAEncryption").setProvider(BC).build(caPriv)
val serial = BigInt(CertSerialnumber.nextSerialNumber)
val certgen = new JcaX509v3CertificateBuilder(new X500Name(issuer.getName), serial.bigInteger, fromDate, toDate, csr.getSubject, pk)
我无法从证书生成器获取 get 以将其存储为 PEM 或 DER 格式。
还是我一起走错了路?
最佳答案
好吧......我一直在寻找做同样的事情,但对于我的生活,我不知道该怎么做。 API 都在讨论生成 key 对然后生成证书,而不是如何签署 CSR。不知何故,很偶然 - 这就是我发现的。
由于 PKCS10 代表(CSR)请求的格式,您首先需要将您的 CSR 放入 PKCS10Holder。然后,将其传递给 CertificateBuilder(因为不推荐使用 CertificateGenerator)。您传递它的方式是在持有人上调用 getSubject 。
这是代码(Java,请根据需要调整):
public static X509Certificate sign(PKCS10CertificationRequest inputCSR, PrivateKey caPrivate, KeyPair pair)
throws InvalidKeyException, NoSuchAlgorithmException,
NoSuchProviderException, SignatureException, IOException,
OperatorCreationException, CertificateException {
AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder()
.find("SHA1withRSA");
AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder()
.find(sigAlgId);
AsymmetricKeyParameter foo = PrivateKeyFactory.createKey(caPrivate
.getEncoded());
SubjectPublicKeyInfo keyInfo = SubjectPublicKeyInfo.getInstance(pair
.getPublic().getEncoded());
PKCS10CertificationRequestHolder pk10Holder = new PKCS10CertificationRequestHolder(inputCSR);
//in newer version of BC such as 1.51, this is
//PKCS10CertificationRequest pk10Holder = new PKCS10CertificationRequest(inputCSR);
X509v3CertificateBuilder myCertificateGenerator = new X509v3CertificateBuilder(
new X500Name("CN=issuer"), new BigInteger("1"), new Date(
System.currentTimeMillis()), new Date(
System.currentTimeMillis() + 30 * 365 * 24 * 60 * 60
* 1000), pk10Holder.getSubject(), keyInfo);
ContentSigner sigGen = new BcRSAContentSignerBuilder(sigAlgId, digAlgId)
.build(foo);
X509CertificateHolder holder = myCertificateGenerator.build(sigGen);
X509CertificateStructure eeX509CertificateStructure = holder.toASN1Structure();
//in newer version of BC such as 1.51, this is
//org.spongycastle.asn1.x509.Certificate eeX509CertificateStructure = holder.toASN1Structure();
CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC");
// Read Certificate
InputStream is1 = new ByteArrayInputStream(eeX509CertificateStructure.getEncoded());
X509Certificate theCert = (X509Certificate) cf.generateCertificate(is1);
is1.close();
return theCert;
//return null;
}
如您所见,我在此方法之外生成了请求,但将其传入。然后,我让 PKCS10CertificationRequestHolder 接受它作为构造函数 arg。
接下来,在 X509v3CertificateBuilder 参数中,您将看到 pk10Holder.getSubject - 这显然就是您所需要的?如果有什么遗漏也请告诉我!!!它对我有用。我正确生成的证书有我需要的 DN 信息。
维基百科有一个关于 PKCS 的 killer 部分 - http://en.wikipedia.org/wiki/PKCS
关于java - 使用 Bouncy CaSTLe 签署 CSR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230330/
(Python)任何人都可以建议用另一个大小为 400k*800k 的 csr 矩阵 B 的列中的值填充 csr 矩阵 A 的最简单和最快的方法。我失败的尝试: #x is a list of siz
我必须以 pem 格式提交 CSR。 我已经使用 OpenSSL 生成了 CSR,但在将其转换为 PEM 格式时遇到了困难。 我必须从 example.csr 获取示例 - csr.pem。如何实现?
两年前,我获得了 VeriSign/Symantec SSL 证书。发起此请求时,我们在与证书的通用名称无关的随机服务器上创建了一个 CSR。为了创建 Java keystore ,我执行了以下两个步
由于一些不愉快的原因,我一直在尝试使用 bouncycaSTLe API 手动构建我自己的证书签名请求。 从表面上看,我选择这样做是因为我需要 CSR 的预签名版本,以便使用存储在 HSM 中的 ke
我正在使用 OpenSSL C API 构建 CSR。代码如下: static void seedPRNG() { const int openSSLseedsize = 128; uint8_t *
我正在关注 https://godaddy.com/help/windows-generate-csr-for-code-or-driver-signing-certificate-7282 生成 C
包含公钥和组织详细信息的 CSR(证书签名请求)是否使用私钥加密? - 如果是,证书颁发机构如何解密它,因为 CSR 中的公钥也被加密了? - 如果没有,CA 如何确定 CSR 颁发者拥有私钥? 最佳
我正在 iPhone 开发者门户中使用开发配置助手,但是当我到达它要求我生成并上传 CSR 的部分时,我尝试上传它,但它只是给了我这个错误: 所选的 CSR 无效。请检查文件并重试。 有人知道这意味着
我通过钥匙串(keychain)访问生成 .certSigningRequest 文件(钥匙串(keychain)访问 -> 证书助理 -> 从证书颁发机构请求证书...,我填写了我的邮件并将其保存到
我们可以从签名的证书中生成用于证书签名的 CSR(证书签名请求)吗?当使用不同的权限再次签名时,它应该与原始私钥一起使用。 最佳答案 你不能用你现有的 key 创建一个新的 CSR 吗? openss
我正在尝试使用 Python 加密将挑战 OID 添加到 CSR 的属性部分。我已经查看了文档,到目前为止,我只能向主题添加额外的属性,但这不是我需要的。使用以下代码: OID_CHALLENGE =
我正在创建我的第一个 iOS 应用程序,并尝试设置我的推送通知证书。当我上传 CSR 证书以生成证书时,我只是看到一个旋转的轮子,上面写着“正在加载...”,该过程持续了几个小时。这个过程需要多长时间
我想找到一种方法来操作 scipy.sparse.csr_matrix,以便根据列获得其元素的总和。例如,如果我有这个: (2, 883) 0.0194935608679 (10, 883)
我目前正在学习证书签名请求 (certificates Signing Requests, csr) 的工作原理。我的 csr 的内容是这样的 openssl req -text -noout -ve
我想为 2 个域购买多域通配符证书:*.domain1.org 和 *.domain2.org 我应该如何生成 CSR?因为我尝试使用通用名称 *.domain1.org 生成它,但我尝试购买的网站不
如何在cmd.exe上运行csr生成命令 openssl req -nodes -newkey rsa:2048 -keyout www_mydomain_com.key -out www_mydom
我有一个证书请求(见底部),我希望最好从命令行 (Unix) 获取指纹。如果我的目标只是验证两台机器上 PEM 文件的完整性,我可以使用例如sha256sum csr.pem 值,但我想获得与 Pup
我想做的是,创建一个 CSR 并使用受密码保护的私钥( key )。 在 OpenSSL 中,我可以创建一个带有密码的私钥,如下所示: openssl genrsa -des3 -out privke
我正在创建一个网页来获取敏感的客户信息,并希望它位于受 SSL 保护的页面上。 CA 要求我提供 CSR。 我计划在服务器上安装 OpenSSL 并创建其中一个。 这是否意味着我在其上创建 CSR 的
我正在尝试通过以下方法创建证书请求 (CSR),我需要在其中提供私钥,我的理解是 CSR 需要/仅包含公钥信息以及有关请求者的其他详细信息,例如公司名称等等。但是如果在创建 CSR 时提取公钥并传递它
我是一名优秀的程序员,十分优秀!