2012-06-13 3 views
6

서버와 함께 사용중인 SSL 인증서의 세부 정보를 보여주는 웹 페이지가 있습니다. 그 toString()가 괜찮을 거라고 생각하지만, 그것은 다음과 같습니다 : 나는 그것으로이X509Certificate를 인쇄하는 방법이 있습니까?

[0]   Version: 3 
     SerialNumber: 117262955582477610212812061435665386300 
      IssuerDN: CN=localhost 
      Start Date: Wed Jun 13 15:15:05 EST 2012 
      Final Date: Tue Jun 08 15:15:05 EST 2032 
      SubjectDN: CN=localhost 
      Public Key: DSA Public Key 
      y: 6ef96c2ace616280c5453dda2[TRUNCATED BY ME] 

    Signature Algorithm: SHA1withDSA 
      Signature: 302c021450b1557d879a25ccf6b89e7ac6de8dc6 
         0b13df7e0214559cdc810cdb1faa3a645da837cd 
         5efdeb81d62e 
     Extensions: 
         critical(true) 2.5.29.17 value = DER Sequence 
    Tagged [7] IMPLICIT 
     DER Octet String[4] 

문제는 확장의 모호한 표현입니다. "subjectAltNames"와 인증서 이름을 볼 때 내 웹 브라우저에서 볼 수있는 것과 같은 대체 이름 목록을 선호합니다.

이렇게하는 방법이 있습니까? BouncyCastle 전체를 클래스 경로에 가지고 있으므로 거기에서 찾을 수 있기를 기대했지만 찾을 수없는 것 같습니다.

최악의 경우 최악의 경우 모든 비트와 조각을 내 보내는데 시간을 할애 할 수 있음을 알고 있지만 누군가가 거기에서 찾을 것으로 예상되는 확장 기능을 놓칠 지 모릅니다.

답변

1

내 자신의 해결책으로 내 질문에 대답하십시오.

이 진부한 toString() 출력은 Sun의 X509Certificate 구현을 사용할 때만 발생합니다. BouncyCastle을 사용할 때 훨씬 더 자세하게 보이거나 더 자세히 보입니다.

페이지가 렌더링되기 전에 BC의 공급자를 초기화하지 못했던 것으로 나타났습니다. 초기화는 실제로 인증서를 생성하기 위해 사용할 때까지 지연되었으므로 이제는 webapp 시작시 완료되므로 toString()이 훨씬 더 잘 보입니다. 당신은 OBJ를 인쇄하면 BC 제공자에서

1

거의 모든 "비트와 조각은"표준이 X509Certificate 클래스에서 사용할 수 있어야합니다 :

당신은 아주 쉽게 당신이 원하는대로 포맷 할 수 있어야는, 그러나 당신이 원하는 . 'getIssuerAlternativeNames()'컬렉션에 액세스하고 반복 할 수도 있습니다.

는 PS :

다음 X509Certificate 클래스 구현에 대한 좋은 링크입니다 :

는 그리고 여기에 탄력이 성을 사용하고 누군가의 링크입니다 (또한이 솔루션은 위의 포함 링크) :

0

해보십시오 PEMReader API는

byte[] content = data.getBytes(); 
// create new buffered reader 
PEMReader pemReader = new PEMReader(br, null);  
Object obj = pemReader.readObject(); 

당신에게의 toString 형식을 줄 것이다

관련 문제