2016-11-04 4 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----- 

의 또는 당신은 바이너리 형식의 인증서를 읽을 수 있습니다 제거 CERTIFICATE 및 END 인증서 태그를 시작하고 그 문제가 뭔가하는 과정에서 잘못이었다 base64로

+0

오 예를 디코딩. .. 질문을 업데이트했습니다 – Gobliins

+0

코드가 정확합니다. 인증서의 내용에 문제가있는 것 같습니다. http://stackoverflow.com/questions/11621414/reading-an-x-509-certificate-with-java. 대답으로 쓴 것처럼 바이너리'.crt'로 저장하려고 시도하고 더블 클릭 (windows)으로 열거 나 openssl로 가져 오기/내보내기 (링크 참조). 콘텐츠를 공개 할 수 있다면 질문에 복사하면됩니다. – pedrofb

관련 문제