Tag: x509certificate bouncycastle

由弹性城堡生成的CA x.509在Android上被视为用户证书

我使用以下代码生成根CA: public static X509Certificate buildRootCert(KeyPair keyPair) throws Exception { X509v1CertificateBuilder certBldr = new JcaX509v1CertificateBuilder( new X500Name(“CN=Root”), BigInteger.valueOf(1), new Date(System.currentTimeMillis()), new Date(System.currentTimeMillis() + 1000 * 3600 * 24), new X500Name(“CN=Root”), keyPair.getPublic()); ContentSigner signer = new JcaContentSignerBuilder(“SHA1withRSA”) .setProvider(“BC”).build(keyPair.getPrivate()); return new JcaX509CertificateConverter().setProvider(“BC”) .getCertificate(certBldr.build(signer)); } 之后,我还需要2个步骤来获得CA Cert 使用PEMWriter打印base64代码 将输出复制到root.crt文件。 Windows将其识别为CA证书并显示警告…此certifiacate不受信任… ,但当我尝试将此证书安装到Android时,它显示 该软件包包含:一个用户证书 安装已继续,但cert不存在于用户可信列表中 这是生成自签名CA的正确方法吗?

SignerID转换为BouncyCastle库中的X509CertSelector

我正在尝试validation特定邮件是否使用我自己的信任锚识别的实体证书中的有效签名进行签名。 我这样做: public static boolean isValid(CMSSignedData signedData, X509Certificate rootCert) throws Exception { CertStore certsAndCRLs = signedData.getCertificatesAndCRLs(“Collection”, “BC”); SignerInformationStore signers = signedData.getSignerInfos(); Iterator it = signers.getSigners().iterator(); if (it.hasNext()){ SignerInformation signer = (SignerInformation)it.next(); X509CertSelector signerConstraints = signer.getSID(); PKIXCertPathBuilderResult result = buildPath(rootCert, signerID, certsAndCRLs); return signer.verify(result.getPublicKey(), “BC”); } return false; } 但这一行给了我一个编译错误: X509CertSelector signerConstraints = signer.getSID(); 因为它无法从SignerId转换为X509CertSelector。 我尝试使用显式强制转换: […]

从java中的.p7b文件中提取单个.cer证书

我是Cryptography的新手,所以如果您认为这是一个基本问题,请原谅 我有一个.p7b文件,我需要读取并提取单个公共证书,即.cer文件并将其存储在密钥库中。 我不必担心持久存在密钥存储区,因为已经有一个服务将.cer文件作为byte []接收并保存。 我想知道的是,我如何阅读.p7b并提取单个.cer文件? 我知道可以通过openSSL命令完成,但我需要在java中做同样的事情。 我还需要读取Issued By名称,因为它将用作持久保存证书的唯一键。 提前致谢

使用Bouncy Castle Java API生成X.509证书

我正在尝试使用Bouncy Castle Java API生成X.509证书。 我找到了示例代码: http://www.bouncycastle.org/wiki/display/JA1/X.509+Public+Key+Certificate+and+Certification+Request+Generation 但是,在编译以下代码之后,JVM会显示错误消息,如下所示 Could not find the main class: org.bouncycastle.util.AllTests. Program will exit. 请注意, org.bouncycastle.util.AllTests将插入到Java构建路径中。 如何修复我的代码才能正常工作? import java.math.BigInteger; import java.util.Date; import org.bouncycastle.asn1.ASN1Object; import org.bouncycastle.asn1.ASN1Sequence; import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.asn1.x509.AlgorithmIdentifier; import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; import org.bouncycastle.cert.X509CertificateHolder; import org.bouncycastle.cert.X509v1CertificateBuilder; import org.bouncycastle.crypto.params.RSAKeyParameters; import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder; import org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder; import org.bouncycastle.operator.bc.BcRSAContentSignerBuilder; public class X509CertificateCreator{ AlgorithmIdentifier sigAlgId […]

使用Bouncy Castle在Java中创建自定义X509 v3扩展

我已成功使用Bouncy Castle的X509v3CertificateBuilder Java类创建带有标准V3扩展的X509证书。 我现在正在尝试使用自定义扩展创建证书。 我可以使用addExtension(…)方法创建自定义扩展,但是,证书中的结果值不是我想要的。 例如,我希望在自定义OID 1.2.3.4下的证书中列出这些确切的八位字节:“00 00 00 00 FF FF FF FF”。 我尝试的所有内容都包含ASN1编码的八位字符串,最终为“04 08 00 00 00 00 FF FF FF FF”。 基本上,我想在Java中创建一个带有自定义扩展的证书,该扩展看起来与使用具有此配置的扩展文件使用OpenSSL创建时证书的外观相同: 1.2.3.4=DER:00:00:00:00:FF:FF:FF:FF 这可以用X509v3CertificateBuilder类以干净的方式完成吗? 下面是一段创建“不正确”值的代码片段。 // Raw value to place in cert for OID 1.2.3.4. byte[] bytearray = {0, 0, 0, 0, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF}; ASN1ObjectIdentifier asn1oid […]

使用bouny castle正确创建带有中间证书的新证书

所以我的问题如下, 基本上我想使用充气城堡(jdk16版本1.46)创建证书链。 我对bouncy castle和java.security很新,所以如果我的方法可能完全错误,但无论如何这就是我所做的: 到目前为止,我能够创建一个自签名证书,我将其用作根证书。 这是使用以下代码完成的: //—–create CA certificate with key KeyPair caPair = Signing.generateKeyPair(“DSA”, 1024, null, null); 这基本上创建了密钥对,如果需要,两个空选项用于提供者和安全随机。 Map<ASN1ObjectIdentifier, Entry> caMap = new HashMap<ASN1ObjectIdentifier, Entry>(); caMap.put(X509Extensions.BasicConstraints, new AbstractMap.SimpleEntry(true, new BasicConstraints(true))); //——this creates the self signed certificate X509Certificate caCert = X509CertificateGenerator.generateX509Certificate(serial, “CN=CA”, “CN=CA”, start, end, “SHA1withDSA”, caPair.getPrivate(), caPair.getPublic(), null, caMap); 这将创建具有提供的属性的证书。 serial =简单地以毫秒为单位的当前时间 start =基本相同(可能有1或2毫秒的差异) […]

使用Bouncy Castle Java生成X509证书

我正在寻找一个示例或教程来使用Java中的BC生成X509证书。 很多例子都有/使用过时的API。 我看了BC,但它没有显示哪个类做了什么或没有适当的文档/示例。 如果您对此有任何想法,请指出我可以使用BC生成X509证书的教程。 [生成和写入文件的公钥和私钥]

用Java生成X509Certificate的主题哈希

我目前正在尝试使用Java Security API和BouncyCastle生成主题哈希。 当我使用Openssl库时,这就是我的工作: openssl x509 -in /Users/Sn0wfreezeDev/Downloads/Test.pem -hash 这会生成一个短的8位数哈希值1817886a 这是我的Java代码 X509Certificate cert = CertManager.getCertificate(number, c); MessageDigest sha1 = MessageDigest.getInstance(“SHA1″); System.out.println(” Subject ” + cert.getSubjectDN()); System.out.println(” Issuer ” + cert.getIssuerDN()); sha1.update(cert.getSubjectDN().getName().getBytes()); String hexString = bytesToHex(sha1.digest()); System.out.println(” sha1 ” + hexString); System.out.println();