Cần trợ giúp về các thủ tục mã hóa trong Java.Xác minh chứng chỉ PKCS # 7 trong Java
Với chữ ký PKCS # 7, tôi muốn xác minh tất cả chứng chỉ có chứa một cửa hàng đáng tin cậy. Tôi giả định rằng tất cả các chứng chỉ có trong chữ ký đều đúng thứ tự để tạo đường dẫn chứng chỉ hợp lệ (hoặc chuỗi, bất kỳ thứ gì), sao cho
- trên cùng (# 0) là chứng chỉ ký;
- tiếp theo (# 1) là chứng chỉ trung gian, được sử dụng để ký # 0;
- tiếp theo (# 2) là một chứng chỉ trung gian khác, được sử dụng để ký # 1;
- v.v.
Chứng chỉ cuối cùng (#N) được ký bởi CA.
Đó là những gì tôi đã được quản lý để hack cho đến nay:
// 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());
Vậy câu hỏi được - cách này có thể được thực hiện bằng các lớp Java chuẩn như CertPath
và bạn bè? Tôi có một cảm giác mạnh mẽ rằng tôi đang tái phát minh ra một chiếc xe đạp. Hoặc, nếu ai đó có một ví dụ với thư viện BouncyCastle, điều đó cũng sẽ ổn.
Câu hỏi thưởng: cách xác minh chứng chỉ đối với một cửa hàng đáng tin cậy để chứng chỉ gốc được chọn tự động?
bạn biết bạn không được phép sử dụng các lớp học từ mặt trời. *, Phải không? –
Yup. Tôi chỉ tìm thấy đây là cách dễ nhất để trích xuất chứng chỉ từ phong bì CMS. Nhưng tôi đoán tôi thực sự nên chuyển sang BouncyCastle, thậm chí xem xét một sự phụ thuộc thêm. – hudolejev