java - 将 X509 证书转换为 Base64 时遇到问题

标签 java base64 x509certificate

我有一个 X509 证书,我想将它存储在 MySQL DB 中而不是保存文件。因此,我认为将证书转换为 base64 并存储它会更好。我已经完成了这种转换的正向和反向,但是我没有得到真正的结果。

我正在使用 javax.security.cert.X509Certificate 并按如下方式导入 org.apache.commons.codec.binary.Base64:

X509Certificate cert = X509Certificate.getInstance(new FileInputStream(certFile));
System.out.println("Vigencia: "+cert.getNotAfter());
System.out.println("Inicio: "+cert.getNotBefore());
String cert64 = bytes2String(Base64.encodeBase64(cert.toString().getBytes("UTF-8")));
System.out.println("Cert 64: "+ cert64);
String certRegreso = bytes2String(Base64.decodeBase64(cert64.getBytes()));
System.out.println("Cert Regreso: "+ certRegreso);
X509Certificate certNuevo = X509Certificate.getInstance(certRegreso.getBytes());

最佳答案

根据 javadocs X509Certificate implements Serializable 那么为什么不使用更简单的解决方案并将其存储为字节数组呢?像这样的东西:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);   
out.writeObject(certificate);
byte[] data = bos.toByteArray(); 
bos.close();

现在只需将字节数组存储为 blob。要重新创建它,您可以使用:

ByteArrayIntputSream bis = new ByteArrayInputStream(byteData);
ObjectInput in = new ObjectInputStream(bis);
X509Certificate cert = (X509Certificate) in.readObject(); 
bis.close();

关于java - 将 X509 证书转换为 Base64 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991936/

相关文章:

java - 为什么在 HttpServlet 中放置 response.addHeader 会导致失败

java - 嵌套 Vaadin 应用程序

javascript - 在图像加载之前不要解决 promise

javascript - Go与Node.js base64编码、解码问题

java - 使用java加密pdf中的嵌入附件

java - 如何知道 x509 证书是否由 RSA 签名?

java - 如何为本地主机或使用 ipaddress 安装证书?

java - 在多台机器上实现单一速率限制的好方法是什么?

java - 如何解决重复条目 : com/google/android/gms/actions/ReserveIntents. 类

javascript - 在 JavaScript 中获取图像数据 URL?