Java의 암호화 루틴에 대한 도움이 필요합니다.Java에서 PKCS # 7 인증서 확인
PKCS # 7 서명이 있으면 신뢰할 수있는 저장소에 대해 포함 된 모든 인증서를 확인하려고합니다. 나는 서명에 포함 된 모든 인증서가 유효한 인증서 경로 (또는 체인)를 구성하기 위해 올바른 순서로 있다고 가정합니다. 따라서
- 최상위 (# 0)는 서명 인증서입니다.
- 다음 인증서 (# 1)는 # 0에 서명하는 데 사용되는 중간 인증서입니다.
- 다음 중 하나 (# 2)는 # 1에 서명하는 데 사용되는 다른 중간 인증서입니다.
- 등등.
마지막 인증서 (#N)는 CA가 서명합니다.
지금까지 해킹을 관리했습니다 무엇 그것은 :
// Exception handling skipped for readability
//byte[] signature = ...
pkcs7 = new PKCS7(signature); // `sun.security.pkcs.PKCS7;`
// *** Checking some PKCS#7 parameters here
X509Certificate prevCert = null; // Previous certificate we've found
X509Certificate[] certs = pkcs7.getCertificates(); // `java.security.cert.X509Certificate`
for (int i = 0; i < certs.length; i++) {
// *** Checking certificate validity period here
if (cert != null) {
// Verify previous certificate in chain against this one
prevCert.verify(certs[i].getPublicKey());
}
prevCert = certs[i];
}
//String keyStorePath = ...
KeyStore keyStore = KeyStore.getInstance("JKS"); // `java.security.KeyStore`
keyStore.load(new FileInputStream(keyStorePath), null);
// Get trusted VeriSign class 1 certificate
Certificate caCert = keyStore.getCertificate("verisignclass1ca"); // `java.security.cert.Certificate`
// Verify last certificate against trusted certificate
cert.verify(caCert.getPublicKey());
그래서 질문입니다 - 이것은 CertPath
과 친구 같은 표준 자바 클래스를 사용하여 어떻게 할 수 있는가? 나는 자전거를 다시 발명한다는 강한 느낌을 가지고 있습니다. 또는 누군가가 BouncyCastle 라이브러리 예제를 가지고 있다면 괜찮을 것입니다.
보너스 질문 : 루트 인증서가 자동으로 선택되도록 신뢰할 수있는 저장소에 대한 인증서를 확인하는 방법은 무엇입니까?
당신은 태양의 수업을 사용하지 않아도된다는 것을 알고 있습니다. *, 맞습니까? –
예. 난 그냥 CMS를 봉투에서 인증서를 추출하는 가장 쉬운 방법을 찾으십시오. 하지만 BouncyCastle로 전환해야한다고 생각합니다. – hudolejev