无法分析证书:java.io.IOException:不支持的编码

无法分析证书:java.io.IOException:不支持的编码,java,certificate,rsa,x509,pki,Java,Certificate,Rsa,X509,Pki,当我试图将证书传输到X.509时,我遇到以下异常 “无法分析证书:java.io.IOException:不受支持 编码“ CA的2048证书是这样的(证书只是一行,没有换行符),这正常吗 -----开始证书----- Miiertccay2Gawgibibkicgawqyjkozihvcqfbqawtelmakga1ebhmcq04xmdaubgnvbaotj0noaw5hiezpBuy2hbcDzxJ0awzPy20aw9UiFc1eaxpqSqBurvnuie9DqTexDqWnja2Ox

当我试图将证书传输到X.509时,我遇到以下异常

“无法分析证书:java.io.IOException:不受支持 编码“

CA的2048证书是这样的(证书只是一行,没有换行符),这正常吗

-----开始证书----- Miiertccay2Gawgibibkicgawqyjkozihvcqfbqawtelmakga1ebhmcq04xmdaubgnvbaotj0noaw5hiezpBuy2hbcDzxJ0awzPy20aw9UiFc1eaxpqSqBurvnuie9DqTexDqWnja2OxDqWnja2OxDqOxDqOwDqOxDqOwDqEbgAqOxDqEqEqEqEqWxDqOxDqOxDqOxDqOxDqOwDqOwDqEqEqEqEqEqEqEqEqOwDqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqEqOvO2.中国的一份研究报告是一份研究报告。一份研究报告是一份研究报告。一份研究报告是一份研究报告。一份研究报告是一份研究报告。一份研究报告是一份研究报告。一份研究报告是一份研究报告。一份研究是一份研究报告是一份研究报告。一份研究是一份研究报告是一份研究。一份研究是一份研究是一份研究。一份研究是一份研究。一份研究是一份研究是一份研究,一份研究是一份研究报告是一份研究,一份研究。一份研究是一份研究,一份研究,一份研究是一份研究,一份研究,一份研究是一份研究,一份研究是一份研究,一份研究,一份研究是一份研究,一份研究,一份研究,一份研究是一份研究,一份研究,一份研究,一份研究,一份关于关于一份研究,一份研究,一份研究,一份研究。他们f652.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2+2.在一篇研究论文中,一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇文章的研究的文章,一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇研究的文章的文章的研究,一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇文章的文章的文章的文章的研究的研究的文章的研究的文章的文章的文章的文章的文章的文章的文章的研究的研究的文章的文章的文章的文章的研究,关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇SGPWE8UPDTENU+XGTHSSNRTPBXKKY5ZUEJ7YGHSHIT8MAK37QIGC12FL1GF7OG8OCE/a1ZyfTukj0KRI=----结束 证书-----

程序是这样的:

  public static X509Certificate getX509Certificate(String base64Cert)
{
    X509Certificate cert = null;
    if (!isNullOrEmpty(base64Cert))
    {
        log.error("getX509Certificate(): " + base64Cert);
        BufferedInputStream is = new BufferedInputStream(
                new ByteArrayInputStream(base64Cert.getBytes()));
        CertificateFactory cf;
        try
        {
            cf = CertificateFactory.getInstance("X.509");
            cert = (X509Certificate) cf.generateCertificate(is);
        } catch (CertificateException e)
        {
            log.error("cert format error,cert content is [" + base64Cert
                    + "]");
        }
    } else
    {
        log.error("cert is null");
    }
    return cert;
}

任何帮助都将不胜感激

无论如何,这是我的解决方案,将单线证书转移到多线证书。 但我仍然不知道原因,任何人都可以解释,请张贴您的答案

public static String singleLine2MultiLine(String p10) throws Exception{
    byte[] base64Data = p10.getBytes();
    ByteArrayInputStream bis = new ByteArrayInputStream(base64Data);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte tmp;
    while ((tmp = (byte) bis.read()) != -1) {
        if (tmp != 0x0a && tmp != 0x0d) {
            bos.write(tmp);
        }
    }
    byte[] bSingleLine = bos.toByteArray();
    ByteArrayOutputStream bos2 = new ByteArrayOutputStream();
    for (int i = 0; i < bSingleLine.length; i++) {
        if (i != 0 && i % 64 == 0) {
            bos2.write("\r\n".getBytes());
        }
        bos2.write(bSingleLine[i]);
        if (i == bSingleLine.length - 1) {
            bos2.write("\r\n".getBytes());
        }
    }
    return new String(bos2.toByteArray());
}
公共静态字符串singleLine2MultiLine(字符串p10)引发异常{
字节[]base64Data=p10.getBytes();
ByteArrayInputStream bis=新的ByteArrayInputStream(base64数据);
ByteArrayOutputStream bos=新建ByteArrayOutputStream();
字节tmp;
而((tmp=(byte)bis.read())!=-1){
如果(tmp!=0x0a&&tmp!=0x0d){
bos.write(tmp);
}
}
字节[]bSingleLine=bos.toByteArray();
ByteArrayOutputStream bos2=新建ByteArrayOutputStream();
对于(int i=0;i
PEM文件格式为

  • 可忽略数据
  • 换行符,或数据缓冲区的开头
  • 5连字符
  • “开始”
  • 一个或多个单词(类型信息)
  • 5连字符
  • 新行
  • Base64编码数据(有效负载)
  • 新行
  • 5连字符
  • “结束”
  • 类型信息的值相同
  • 5连字符
  • 可忽略数据

换行符是格式的一部分。如果没有它,您就不是PEM,而且因为它可能只支持PEM和DER(base64编码数据的二进制表示),并且您的值不是这两个值,所以它是在某种“不受支持的编码”中,这恰好是“类似PEM的,但没有换行符”

这是我将Base64格式的证书转换为X509Certificate的解决方案

    byte[] decodedCertificate = 
    Base64.decodeBase64(encodedCertificate.getBytes());
    CertificateFactory certificateFactory;
    Certificate certificate = null;

    try {
         certificateFactory = CertificateFactory.getInstance("X.509");
         certificate = certificateFactory.generateCertificate(new 
          ByteArrayInputStream(decodedCertificate));
    } catch (CertificateException e) {
        e.printStackTrace();
    }

      X509Certificate x509Certificate =  (X509Certificate) certificate;