SunMSCAPI 암호화 공급자는 Windows-MY
(개인 인증서 저장소)과 Windows-ROOT
(신뢰할 수있는 기관 인증서 저장소)의 두 가지 키 저장소 만 지원하므로 다른 Windows 인증서 저장소에 직접 액세스 할 수 있다고 생각하지 않습니다. 그러나 Windows-MY
키 스토어가 다른 상점의 인증서로 인증서 체인을 구축 할 수 있기 때문에 필요하지 않을 수 있습니다. 중간 CA에서 CA를 추가 한 후
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null) ;
Enumeration en = ks.aliases() ;
while (en.hasMoreElements()) {
String aliasKey = (String)en.nextElement() ;
Certificate c = ks.getCertificate(aliasKey) ;
System.out.println("---> alias : " + aliasKey) ;
if (ks.isKeyEntry(aliasKey)) {
Certificate[] chain = ks.getCertificateChain(aliasKey);
System.out.println("---> chain length: " + chain.length);
for (Certificate cert: chain) {
System.out.println(cert);
}
}
나는 체인의 길이가 1 인 개인 인증서 저장소에서 개인 키와 하나의 인증서를 추가하는 경우 : 여기
내가 그것을 테스트하는 데 사용하는 코드입니다 인증서 저장소의 I 프로그램을 한 번 실행하고 체인의 길이가 지금 2
UPDATE이다 (, 2 에이프릴) 이 프로그램 몇 가지 제한과 Windows-MY
및 Windows-ROOT
키 저장소에 인증서를 추가 할 수 있습니다 :
- 사용자가 모든 인증서가
Windows-MY
스토어에서 추가 확인
- 를 입력하라는 메시지가있는
Windows-ROOT
에 인증서를 추가, TrustedCertificateEntry
(보기보기의 키 스토어의 관점에서가 아니라 윈도우 점)입니다. 키 저장소는 사용 가능한 모든 인증서로 가능한 가장 긴 체인을 만드는 것으로 보입니다.
- 개인 키가없는 인증서는 Windows 인증서 저장소 브라우저에 표시되지 않지만 프로그래밍 방식으로 삭제할 수 있습니다. 키 저장소에 인증서를 추가
는
간단하다 :
Certificate c = CertificateFactory.getInstance("X.509").generateCertificate(new FileInputStream("C:/Users/me/Downloads/myca.crt"));
KeyStore.TrustedCertificateEntry entry = new KeyStore.TrustedCertificateEntry(c);
ks.setEntry("CA1", entry , null);
출처
2011-04-01 07:55:11
Jcs
예, 사용자의 인증서가 개인 상점에있는 경우 문제가 없습니다. 프로그래밍 방식으로 추가 할 수 있을지 궁금해합니다. – Mermeister
예 가능합니다. 내 대답을 더 자세하게 업데이트합니다. – Jcs
그게 효과가! 스마트 카드에서 내 사용자의 인증서를 검색하고 프로그래밍 방식으로 Windows-MY 저장소에 추가 한 다음 Windows 키 저장소를 사용하여 체인을 작성합니다. – Mermeister