Привет я пытаюсь для проверки certifacte против другого и получаю сообщение об ошибке во время чтения первого сертификата формирования файла:java.security.cert.CertificateException: Невозможно инициализировать
//Get Public Key
BasicX509Credential publicCredential = new BasicX509Credential();
File publicKeyFile = new File("keys/azurecert.cer");
if (publicKeyFile.exists()) {
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
InputStream fileStream = new FileInputStream(publicKeyFile);
X509Certificate certificate = (X509Certificate)certificateFactory.generateCertificate(fileStream);
fileStream.close();
azurecert.cer
был создан мною и его содержимое было скопировано с azures (adfs) federationmetadata.xml. Это проблема?
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>
MIIC4jCC....
</X509Certificate>
</X509Data>
</KeyInfo>
и я положил его в этом формате:
—–--BEGIN CERTIFICATE--—–
MIIDBTCCAe2gAwIBAgIQPLxWKJFunNyLetteErs/DAtQPLxWKJFunNyLMMFsdioT
MSswKQYDVQQDEyJhY2NvdW50cy5hFunNyLetteErsndpbmRvd3MubmV0XHhsStcm
....
----END CERTIFICATE----
Но это приводит:
java.security.cert.CertificateException: Unable to initialize, java.io.IOException: extra data given to DerValue constructor
на линии:
certificateFactory.generateCertificate(inputStream2)
Может кто-то помочь?
ах да, что проблема что-то пошло не так во время процесса. .. я обновил вопрос – Gobliins
Ваш код верен. Кажется, проблема с содержанием сертификата. http://stackoverflow.com/questions/11621414/reading-an-x-509-certificate-with-java. Попробуйте сохранить как двоичный '.crt', как я написал в ответ, и откройте его двойным щелчком (windows) или импортируйте/экспортируйте с помощью openssl (см. Ссылку). Если содержимое может быть общедоступным, скопируйте его в вопрос, и я посмотрю – pedrofb