【问题标题】:Convert x509Certificate into byte[] and reverse将 x509Certificate 转换为 byte[] 并反转
【发布时间】:2015-03-19 19:19:26
【问题描述】:

我会将 X509Certificate 转换为 byte[] 或 String,然后从 byte 获取 X509Certificate。 我用过这段代码

X509Certificate x509cert=Helper.saveCertificate(workgroupId, serialNumber);


//x509 to byte[]
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);   
out.writeObject(x509cert);
CertificateSerialization certificateSerialization=new CertificateSerialization();
certificateSerialization.setCertificateByte(bos.toByteArray()); 
bos.close();
return handleResult(certificateSerialization);

并通过这种方法恢复:

byte[] x509cert=certificateSerialization.getCertificateByte();

//from byte to x509
ByteArrayInputStream bis = new ByteArrayInputStream(x509cert);
ObjectInput in = new ObjectInputStream(bis);
X509Certificate cert = (X509Certificate) in.readObject(); 
bis.close();
response.setResult(cert);

但是当我分析返回的 x509 时,这与原始证书不同。你认为有错误吗? 提前致谢

【问题讨论】:

    标签: java string certificate bytearray x509certificate


    【解决方案1】:

    使用X509Certificate.getEncoded()

    byte[] java.security.cert.Certificate.getEncoded() throws CertificateEncodingException
    

    getEncoded() 返回此证书的编码形式。假设每种证书类型只有一种编码形式;例如,X.509 证书将被编码为 ASN.1 DER。

    【讨论】:

      【解决方案2】:

      使用 String 我已经解决了我的问题,特别是我使用了以下代码: 转换成字符串我的 x509Certificate

      Base64 encoder = new Base64(64);
      String cert_begin = "-----BEGIN CERTIFICATE-----\n";
      String end_cert = "-----END CERTIFICATE-----";      
      byte[] derCert = x509cert.getEncoded();
      String pemCertPre = new String(encoder.encode(derCert));
      String pemCert = cert_begin + pemCertPre + end_cert;
      return pemCert;
      

      同时将此字符串转换为 x509:

      Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
      String pem=//PEM STRING
      X509Certificate cert = null;
      StringReader reader = new StringReader(pem);
      PEMReader pr = new PEMReader(reader);
      cert = (X509Certificate)pr.readObject();
      pr.close();
      

      【讨论】:

        猜你喜欢
        • 2012-10-28
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 2014-07-21
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多