Возникли проблемы при преобразовании сертификата X509 в Base64 - PullRequest
3 голосов
/ 24 января 2012

У меня есть X509 Certificate, и я хочу сохранить его в 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());

1 Ответ

10 голосов
/ 24 января 2012

Согласно javadocs X509Certificate реализует Serializable, так почему бы не использовать гораздо более простое решение и сохранить его как байтовый массив? Что-то вроде:

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

А теперь просто сохраните байтовый массив как большой двоичный объект. Чтобы воссоздать его, вы можете просто использовать:

ByteArrayIntputSream bis = new ByteArrayInputStream(byteData);
ObjectInput in = new ObjectInputStream(bis);
X509Certificate cert = (X509Certificate) in.readObject(); 
bis.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...