当前位置: 首页 > 知识库问答 >
问题:

如何使用Java创建X509证书?

壤驷棋
2023-03-14

我想用Java语言创建一个X509证书,然后从中提取公钥。

我在网上搜索了一下,发现了很多代码示例,但都有错误(未知变量或未知类型),或者有很多警告说:“方法...来自类型...是不建议使用的”等。

例如,以下代码不起作用的原因:

PublicKey pk;
CertificateFactory cf = CertificateFactory.getInstance("X.509");
String PKstr = pk.toString();
InputStream PKstream = new ByteArrayInputStream(PKstr.getBytes());
X509Certificate pkcert = (X509Certificate)cf.generateCertificate(PKstream);


谁能告诉我如何使用纯Java或Bouncy Castle创建证书,然后从中获取公钥?

谢谢大家。

共有2个答案

邵星河
2023-03-14

是的,使用BouncyCastle,从两个公钥(证书的密钥和CA的密钥)创建X509证书在这里完成。

我在这里将生成的证书转换为PEM。

柴默
2023-03-14

还可以仅使用JDK类生成证书。缺点是必须使用来自太阳的两个类。安全x509包装。代码是:

KeyStore keyStore = ... // your keystore

// generate the certificate
// first parameter  = Algorithm
// second parameter = signrature algorithm
// third parameter  = the provider to use to generate the keys (may be null or
//                    use the constructor without provider)
CertAndKeyGen certGen = new CertAndKeyGen("RSA", "SHA256WithRSA", null);
// generate it with 2048 bits
certGen.generate(2048);

// prepare the validity of the certificate
long validSecs = (long) 365 * 24 * 60 * 60; // valid for one year
// add the certificate information, currently only valid for one year.
X509Certificate cert = certGen.getSelfCertificate(
   // enter your details according to your application
   new X500Name("CN=My Application,O=My Organisation,L=My City,C=DE"), validSecs);

// set the certificate and the key in the keystore
keyStore.setKeyEntry(certAlias, certGen.getPrivateKey(), null, 
                        new X509Certificate[] { cert });

从密钥存储中检索私钥以加密或解密数据。基于代码来自http://www.pixelstech.net/article/1408524957-Generate-cetrificate-in-Java----3

 类似资料:
  • 我已经使用Bouncy Castle创建了X509证书,但我不能与或一起使用,因为它们(当然)使用的是.NET版本。虽然Bouncy Castle中有一个转换器,它接受一个BC X509并返回一个.NET X509。问题似乎是AuthenticateasServer/AuthenticateasClient需要包含私钥的证书。至少当我尝试转换并使用新证书时,在尝试使用SSLStream进行连接时会

  • 问题内容: 是否可以在不使用Bouncy Castle 类的情况下用Java代码合理地创建X509证书? 问题答案: 签名证书的能力不是标准Java库或扩展的一部分。 您自己需要做的许多代码都是核心的一部分。有一些类可以编码和解码X.500名称,X.509证书扩展,各种算法的公钥,当然还有用于实际执行数字签名的类。 自己实施这项工作并非易事,但绝对是可行的-我第一次制作可用于证书签名的原型时,可能

  • 问题内容: 我想用PyCrypto在python中加密一些数据。 但是使用时出现错误: 密钥是使用以下命令生成的: 代码是: 问题答案: PyCrypto不支持X.509证书。您必须首先使用以下命令提取公钥: 然后,您可以在上使用。 如果您不想或不能使用openssl,则可以获取PEM X.509证书,并使用纯Python进行认证,如下所示:

  • 问题内容: 我已经看过4个(是,四个)教程,但仍然不知道如何使它工作。 在我的Glassfish 4.1.1服务器中设置为HTTPS配置的第二个HTTP侦听器之后,我尝试创建证书,因此在浏览器中没有出现安全错误。问题是,我只是无法使keytool正常工作;无论我做什么,它都会弄乱并抛出奇怪的错误。例如,它找不到许多指南推荐的某些命令。 我可以猜测该工具在Java 8或其他版本中发生了变化,我真的不

  • 我已经看了4个(是的,四个)教程,仍然不知道如何使这工作。 编辑:说真的,我正因此陷入困境。我只是什么都不能做:cacerts密码不是典型的“changeit”,我不能在密钥库之外获取密钥,因此我不能用证书做任何事情。

  • 我正在测试iText 7.1.2.0库,以便在C#项目中使用数字证书或智能卡(X509Certificate2)签署pdf文件。但是当我尝试创建IExternalSignature时,我遇到了这个错误。 根据找到的留档(这里,这里和这里),实现这个过程的方法是使用BouncyCastle库,它允许从数字证书中提取主键,但是,它给我一个错误,我找不到另一种方法来做到这一点。在留档(这里)中,它们是从