Tôi muốn xác minh chứng chỉ X509 được trình bày bởi khách hàng dựa vào CRL để xem liệu nó có bị thu hồi hay không. Tôi đã instanciated thành công một java.security.cert.X509CRL
, nhưng tôi gặp khó khăn lấy giấy chứng nhận phiên:Sự không tương thích giữa javax.security.cert.X509Certificate và java.security.cert.X509Certificate
try {
SSLSocket s = (SSLSocket) serverSocket.accept();
s.setSoTimeout(TIMEOUT_RW * 1000);
s.startHandshake();
SSLSession session = s.getSession();
X509Certificate[] cert = session.getPeerCertificateChain();
if (crl.isRevoked(cert[0])) {
System.err.println("Attempted to stablish connection using revoked certificate");
} else {
...
}
} catch (Exception ex) {
System.err.println("Something went wrong");
}
SSLSession thuộc về gói javax.net.ssl
, và phương pháp của nó getPeerCertificateChain()
trả về một javax.security.cert.X509Certificate[]
, mà không thể được chuyển đổi sang java.security.cert.X509Certificate[]
rằng Tôi cần cho ăn java.security.cert.X509CRL
. Làm thế nào nó có thể được thực hiện?
Vấn đề với lựa chọn đó (tôi dự tính nó) là sau đó tôi cần phải sử dụng phương pháp X509Certificate, vì vậy nó là không đủ tốt cho tôi. – user2891462
Nhưng 'Certificate' là lớp trừu tượng - tôi đặt cược rằng' cert [0] 'là' instanceof' 'X509Certificate' class. Chỉ cần kiểm tra và đúc – MGorgon
@ user2891462 Nếu không, bạn có thể thực hiện chuyển đổi như thế này được triển khai phương pháp 'X509Certificate [] conversionCertificates (Certificate [] certsIn)': https://groups.google.com/forum/#!topic/android- developers/HCiHwBKOsrI – MGorgon