2

인증서 제목 필드에서 문자열을 검색하려고하지만 해당 CN 값만 검색하려고합니다.인증서에서 제목/CN 필드 검색 중?

Enumeration enumeration = ks.aliases(); 
while (enumeration.hasMoreElements()) { 
    String aliass = (String) enumeration.nextElement(); 
    X509Certificate cer = (X509Certificate) ks.getCertificate(aliass); 
    String s = cer.getSubjectDN().getName().; 
    System.out.println(s); 
} 

출력은 다음과 같습니다 : CN에 내가 원하는 언급 한 바와 같이 = 뭔가, OU = 뭔가, DC = 뭔가, DC = 뭔가, DC =가 someting

은 내가 사용하는 전체 문자열을 얻을 수 있습니다 CN 문자열 만 검색하십시오. 거기에 대해 짧은 방법이 있거나 일부 certs.getName() 자신의 전자 메일 주소로 시작하기 때문에 필드를 가져 오는 부분 문자열 메서드로 재생해야합니다.

답변

0

javadoc에 따르면 당신은 시도 할 수 있습니다 다음

cer.getSubjectX500Principal() 
+0

나는 나의 방법 및 당신의 제안으로 완전히 동일한 결과를 얻습니다. – caniaskyouaquestion

+0

그래서 아직 솔루션을 찾고 있습니다. @ funtik – caniaskyouaquestion

+0

흠 ... 아이디어가 있습니다. :) 인증서가 올바른 방법으로 생성되었는지 확인하십시오. – WeMakeSoftware

2

내가 자바 API를 사용하여 인증서의 common name를 얻을 명시 적 방법이 없다고 생각한다 (당신은 구문 분석을에 전체 subjectDN를 얻을 수 있습니다 이 도움이

import org.bouncycastle.asn1.x500.X500Name; 
import org.bouncycastle.asn1.x500.style.BCStyle; 
import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder; 
import org.bouncycastle.asn1.x500.RDN; 
import org.bouncycastle.asn1.x500.style.IETFUtils; 

Enumeration enumeration = ks.aliases(); 
while (enumeration.hasMoreElements()) { 
    String aliass = (String) enumeration.nextElement(); 
    X509Certificate cer = (X509Certificate) ks.getCertificate(aliass); 
    X500Name x500name = new JcaX509CertificateHolder(cert).getSubject(); 
    RDN cn = x500name.getRDNs(BCStyle.CN)[0]; 
    String s = IETFUtils.valueToString(cn.getFirst().getValue()); 
    System.out.println(s); 
} 

희망,

: 당신이 방법은 그렇게하는 대신 BouncyCastle 클래스를 사용하려는 경우 등) CN를 얻을 수
+0

감사합니다. 당신의 코드를 시험해 볼 것입니다, 나는 그것을 이미 파싱했습니다. 하지만 고마워, 그것을하는 더 매끄러운 방법 def 당신의 방법입니다. – caniaskyouaquestion

+0

환영합니다. 디지털 서명과 PKI와 관련하여 다른 질문이 있다는 것을 알았습니다. 아마도 이미 답을 얻었을 것입니다.하지만 몇 가지 대답을하려고합니다 :). – albciff

+0

네, 거의 모든 답변을 할 수있었습니다. 그러나 PKCS11 슬롯 문제는 여전히 존재합니다. 나는 그것을 피하고 WINDOWS-MY 방식으로했습니다 ... 그러나 다른 방법으로 @albciff를하고 싶습니다. 고마워. – caniaskyouaquestion