Есть ли возможность создать java.security.cert.X509Certificate из байта []?
Сгенерировать X509Certificate из байта []?
Ответы (3)
Конечно.
Объекты сертификата могут быть созданы экземпляром CertificateFactory. — в частности, настроенный для создания сертификатов X509. Это можно создать так:
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
Затем вам нужно передать ему InputStream, содержащий байты сертификата. Этого можно добиться, заключив массив байтов в ByteArrayInputStream< /а>:
InputStream in = new ByteArrayInputStream(bytes);
X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in);
person
Andrzej Doyle
schedule
02.08.2010
Спасибо за Ваш ответ. Но я получаю (java.security.cert.CertificateException) java.security.cert.CertificateException: Не удалось разобрать сертификат: java.io.IOException: Пустой ввод в последней строке. InputStream не пуст, но выдает Exception
- person Samir; 12.06.2015
То же самое произошло со мной сначала, потому что я не думал тщательно о том, что я делаю. В моем случае это произошло потому, что я пытался сделать это с байтами из хранилища ключей, а не с сертификатом в хранилище ключей. Извлечение сертификата из хранилища ключей, получение закодированных байтов, а затем работа над ними заставили этот ответ выше работать для меня.
- person Trevor Brown; 14.11.2015
В моем случае проблема заключалась в том, что byte[] был закодирован по основанию 64... Сообщение об ошибке было слегка вводящим в заблуждение пустым вводом. Может кому-то когда-нибудь поможет...
- person riskop; 09.06.2016
Как насчет байтов [] из защищенного паролем файла JKS? Как нам сгенерировать сертификат из него?
- person Shashank; 24.06.2020
Вы можете сделать что-то вроде:
X509Certificate certificate = signature.getKeyInfo().getX509Datas().get(0).getX509Certificates().get(0);
String lexicalXSDBase64Binary = certificate.getValue();
byte[] decoded = DatatypeConverter.parseBase64Binary(lexicalXSDBase64Binary);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
Certificate cert = certFactory.generateCertificate(new ByteArrayInputStream(decoded));
person
hal9000
schedule
02.04.2018
person
schedule
В вопросе не упоминается base-64, а инициализация
stream
отсутствует. Этот код выдаст ошибку NullPointerException
.
- person user207421; 23.03.2016