Nghĩ rằng tôi sẽ gặp vấn đề tương tự như những người khác, tôi đã trải qua rất nhiều vấn đề tương tự và các giải pháp tiềm năng, nhưng không có may mắn.Java SSL - InstallCert nhận ra chứng chỉ nhưng vẫn không thể tìm thấy lỗi đường dẫn chứng nhận hợp lệ?
Kho lưu trữ tin cậy tôi đang sử dụng là cacerts, nằm trong lib/security của JRE Java 1.6.0 (build 1.6.0_20-b02 ... đây có phải là gốc của vấn đề không?). Tôi cũng đã thử với jssecacerts.
Sử dụng InstallCert (trên các vấn đề tương tự khác được đăng), tôi có thể thấy chứng chỉ của mình đã được cài đặt và hợp lệ (và tôi đã xóa nó, nhập lại, v.v ... để đảm bảo tôi thấy đúng dữ liệu) :
java InstallCert <my host name>
Loading KeyStore jssecacerts...
Opening connection to <my host name>:443...
Starting SSL handshake...
No errors, certificate is already trusted
Kiểm tra trong keytool và Portecle, tái nhập khẩu các cERT (tôi đã cố gắng tạo ra từ openssl với -showcert, xuất khẩu từ các trình duyệt và scp'ing nó kết thúc, vv) mang lại cho tôi "đó đã tồn tại dưới bí danh khác ở đây "loại tin nhắn. Vì vậy, có vẻ như không có bất kỳ vấn đề nào với cách chứng chỉ được đưa vào (các) công cụ.
Bắt buộc đường dẫn lưu trữ trong mã không tạo ra bất kỳ sự khác biệt nào và trong mọi trường hợp, tôi sẽ thấy khi tôi bật gỡ lỗi (thông qua setProperty của javax.net.debug thành "tất cả") là:
main, SEND TLSv1 ALERT: fatal, description = certificate_unknown
main, WRITE: TLSv1 Alert, length = 2 [Raw write]: length = 7 0000: 15
03 01 00 02 02 2E ....... main, called
closeSocket() main, handling exception:
javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to
find valid certification path to requested target
Rất tiếc, tôi không thể cho phép ghi đè séc bằng cách triển khai TrustManager của riêng mình - nó phải thực sự kiểm tra.
Chứng chỉ tôi nhận được từ máy chủ lưu trữ có một số tiện ích (9, chính xác), điều này khiến tôi tự hỏi liệu chúng có phải là một phần của vấn đề này hay không.
Tôi có thể kiểm tra/thử những gì khác? Thay đổi sang phiên bản JRE khác?
Tại sao bạn không thể triển khai 'TrustManager' của riêng mình? Bạn vẫn có thể sử dụng chứng chỉ trong trình quản lý tin cậy và thực hiện kiểm tra. –
@Vivin - Vấn đề cốt lõi mà tôi đang cố giải quyết nằm trong lớp ứng dụng mà tôi không kiểm soát trực tiếp (trong trường hợp này ứng dụng Grails gọi một số dịch vụ web gần đây đã trở thành HTTPS), vì vậy trong khi tôi có thể sử dụng nó trong kịch bản cục bộ của riêng tôi, tôi không thể bắt buộc sử dụng thượng nguồn của nó. Đó là một nỗi đau, nhưng tôi sẽ đối phó với nó sau này - bây giờ nếu tôi có thể làm cho nó hoạt động ở mức độ chi tiết nhất, ít nhất nó cũng cho tôi biết phải đi đâu tiếp theo trong chuỗi giải pháp. – Bill
Bạn có đang chạy ứng dụng này dưới máy chủ ứng dụng như GlassFish không? Bạn có thể kiểm tra xem liệu quá trình đang chạy nhị phân Java trong /usr/lib/jvm/java-1.6.0-sun-1.6.0.20.x86_64 và không phải một số nhị phân Java khác không thích trustStore của bạn (OpenJDK, v.v.) Đầu ra gỡ lỗi bạn đăng là hữu ích, bạn có thể đăng thêm không? – Brad