2016-11-04 15 views
0

Привет я пытаюсь для проверки 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) 

Может кто-то помочь?

ответ

1

Убедитесь, что у вас есть правильные заголовки. Вместо —–BEGIN CERTIFICATE—– и --END CERTIFICATE-- использования

-----BEGIN CERTIFICATE----- 

-----END CERTIFICATE----- 

В качестве альтернативы вы можете прочитать сертификат в двоичном формате: удалить НАЧАТЬ СЕРТИФИКАТ и END СЕРТИФИКАТ тегов и декодирования base64

+0

ах да, что проблема что-то пошло не так во время процесса. .. я обновил вопрос – Gobliins

+0

Ваш код верен. Кажется, проблема с содержанием сертификата. http://stackoverflow.com/questions/11621414/reading-an-x-509-certificate-with-java. Попробуйте сохранить как двоичный '.crt', как я написал в ответ, и откройте его двойным щелчком (windows) или импортируйте/экспортируйте с помощью openssl (см. Ссылку). Если содержимое может быть общедоступным, скопируйте его в вопрос, и я посмотрю – pedrofb

 Смежные вопросы

  • Нет связанных вопросов^_^