2012-05-07 41 views
14

Tôi đang cố gắng tải ứng dụng chạy trên đầu Tomcat 6 để kết nối với máy chủ LDAP qua SSL.Chứng chỉ đã nhập vào kho khóa Java, JVM bỏ qua chứng chỉ mới

tôi nhập khẩu giấy chứng nhận của máy chủ để keystore sử dụng:

C:\Program Files\Java\jdk1.6.0_32\jre\lib\security>keytool -importcert -trustcacerts -file mycert -alias ca_alias -keystore "c:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts" 

Khi tôi bắt đầu Tomcat với SSL gỡ lỗi bật lên, theo bản ghi Tomcat đang sử dụng tập tin giấy chứng nhận chính xác:

trustStore is: C:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts 

Tuy nhiên , Tomcat không thêm chứng chỉ tôi vừa nhập - tất cả các chứng chỉ khác trong tệp cacerts được in vào nhật ký - và kết nối không thành công:

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 

Khởi động lại Tomcat không hiệu quả. Tôi đã xác minh bằng lệnh keytool -list rằng chứng chỉ mới thực sự tồn tại trên tệp.

Tại sao Tomcat tiếp tục bỏ qua chứng nhận mới của tôi?

EDIT:

Dường như vấn đề là do Windows 7 VirtualStore. Keytool đã tạo một bản sao mới của tệp cacert và Tomcat đã sử dụng tệp gốc.

+0

Tệp 'mycert' có chứa toàn bộ chuỗi chứng chỉ không? Java muốn toàn bộ đường dẫn tin cậy nằm trong cửa hàng. – Romain

+0

Chỉ cần một gợi ý đơn giản, hãy vào 'C: \ Users \ YourAccountName' của bạn, một tên tập tin' .keystore' sẽ ở đó, mở nó ra và xóa tên trước đó của bạn khỏi đó, và sau đó làm lại những gì bạn đã làm.Hy vọng rằng sẽ sắp xếp mọi thứ cho bạn :-) –

+1

@Romain Không, một chứng chỉ đáng tin cậy không liên quan gì đến chuỗi. Bất kỳ chứng chỉ nào được nhập dưới dạng chứng chỉ tin cậy đều được xử lý như chứng chỉ gốc tin cậy. – emboss

Trả lời

4

Kiểm tra xem có khóa nào có cùng thông tin CN nhưng có bí danh khác không.

Tôi đã gặp sự cố tương tự trước khi cố gắng nhập phiên bản chứng chỉ mới hơn nhưng đã để lại phiên bản cũ hơn trong kho khóa. Các chương trình Java của tôi chỉ đơn giản là tìm khóa CN khớp đầu tiên trong kho khóa (key cũ đã hết hạn) và cố gắng sử dụng nó, mặc dù có một phiên bản mới hơn cũng khớp với CN.

Cũng đảm bảo rằng chứng chỉ gốc xác thực (và chứng chỉ trung gian nếu có) tồn tại trong kho khóa. Nếu bạn đang xác thực đối với một trong những nhà cung cấp bảo mật lớn như Verisign hoặc Globalsign, họ thường sẽ cung cấp cho bạn chứng chỉ gốc và trung gian. Nếu các chứng chỉ này tồn tại trong kho khóa, hãy đảm bảo chúng vẫn còn hiệu lực. Bạn cần phải có tất cả các chứng chỉ từ chứng chỉ cá nhân của bạn tất cả các cách xuống chuỗi xác thực vào thư mục gốc, hiện có trong kho khóa của bạn, để nó hiểu cách xác thực thông tin đăng nhập của bạn.

+0

Điều đó dường như không phải là vấn đề, nhưng cảm ơn đề xuất – tputkonen

+0

Tôi đã chỉnh sửa câu trả lời của mình. Bạn đã kiểm tra xem chứng chỉ Gốc cho cơ quan cấp chứng nhận của bạn có tồn tại trong kho khóa không? – wattostudios

+1

Bạn không cần phải thêm chứng chỉ trên chứng chỉ đã có trong kho lưu trữ tin cậy. Bất kỳ chứng chỉ nào trong cửa hàng đều được tin cậy mà không cần xác thực thêm. Nhưng lời khuyên tốt với bí danh! – emboss

0

Những gì bạn mô tả chính xác là những gì tôi đã nhận được khi sử dụng cmd.exe và người dùng thông thường mặc dù thành viên của nhóm quản trị trên Windows Server. Bạn phải bắt đầu cmd.exe trong chế độ quản trị để áp dụng các thay đổi trong tệp cacerts. Ít nhất là trên hệ điều hành Win2k8.

Nếu bạn không thực hiện điều này, các trang web sẽ hiển thị cho bạn trong giao diện keytool.exe -list xem các chứng chỉ mới được bổ sung nhưng Tomcat sẽ không thấy chúng. Không chắc tại sao vậy. Nhưng khi bạn thêm nó với cmd.exe bắt đầu như quản trị viên Tomcat là tốt với các certs mới được thêm vào.

Bạn cũng có thể sử dụng Djavax.net.debug="ssl,handshake" để xem những gì Tomcat đọc từ tệp cacerts.

14

JVM cần khởi động lại sau khi nhập chứng chỉ vào kho khóa.

Các vấn đề liên quan