6

Java에서 X509 인증서로 작업하고 있습니다. 인증서가 있으면 루트 인증서에 도달 할 때까지 서명 계층 구조에서 다른 모든 인증서를 찾을 수 있습니까?인증서 체인 얻기

인증서 파일 (.cer 확장자)이 있는데 상위 서명 인증서를 추출하고 싶습니다. 자체 서명 된 최종 루트 인증서를 얻을 때까지 해당 인증서의 부모를 계속 찾고 싶습니다.

java.security.cert에 X509Certificate 인증서 API 및 관련 API를 확인했지만 유용한 정보를 찾을 수 없습니다.

+1

가능한 복제본 [기존의 리프 인증서에서 중간 및 루트 인증서를 생성하는 방법] (http://stackoverflow.com/questions/11076491/how-to-generate-intermediate-and-root-cert-from- 기존 리프 인증서) –

+1

신뢰할 수있는 방법이 없습니다. http://stackoverflow.com/a/11076955/47961에서 내 대답보기 –

+1

[java.security.KeyStore # getCertificateChain()]을 시도 했습니까? (http://docs.oracle.com/javase/6/docs/api /java/security/KeyStore.html#getCertificateChain(java.lang.String))? – Zaki

답변

2

그것은 어렵지 않습니다. 어떻게 든 아웃 오브 밴드가 하나 이상의 키 체인에서 모든 중간 인증서와 루트 인증서를 가지고 있다고 가정하면.

그냥 않는 냈다 코드에 대한

http://codeautomate.org/blog/2012/02/certificate-validation-using-java/ 

에서보세요. 핵심 비트 validateKeyChain()에 기본적으로 당신이 중간/루트 인증서를 얼마나 에 관해서는

cert = cert-to-validate 
    while(not self signed) { 
     extract issuer from cert 
     scan keychain(s) to find cert with a subject equal to the issuer 
     if none found - error 
     check if the signature is correct. 
     cert = issuers_cert 
    } 
    if not at the top/root - error 

구성 - 그것은 다른 문제입니다. 이 코드는 약간 순진하며 크로스 서명을 이해하지 못합니다. Java pkix는 비록 BouncyCastle이 예제를 가지고 있지만 호출합니다.

일반적으로 루트 인증서를 키 체인에 만들 수 있습니다. 중간 인증서는 종종 "수집"되거나 더 동적으로 발견되어야합니다. 일반적으로 TLS 또는 유사 기간 동안 SSL 스택을 쿼리해야합니다.

관련 문제