2013-01-11 40 views
11

Tôi nhận được ngoại lệ sau trong khi sử dụng thư viện 01AOAuth.Cách thiết lập máy ảo Java để sử dụng chứng chỉ gốc (truststore) được xử lý bởi Mac OS X

Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 

Dựa trên một số googling có vẻ như tôi nên thiết lập cửa hàng ủy thác JVM bằng cách nào đó.

Tại sao tôi cần thực hiện việc này? Làm thế nào tôi có thể hướng dẫn máy ảo Java sử dụng truststore mặc định của os? (Mac OS X trong trường hợp của tôi).

Trả lời

7

tôi có thể thiết lập các truststore mặc định bằng cách thêm hệ thống Propery này khi khởi chạy VM:

-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts 

tôi vẫn không hiểu tại sao tôi cần phải làm điều này. Đây phải là mặc định. Nó cũng rất khó chịu để thêm này mỗi lần. Có cách nào tốt hơn không, ví dụ: một số cài đặt hệ điều hành?

0

Ah! tôi biết vấn đề này. Tôi có vấn đề tương tự, và nó liên quan đến các ràng buộc Java trong OSX. Khi tôi đã cài đặt phiên bản mới nhất, nó đã được sửa.

https://support.apple.com/en-us/HT204036

0

Tôi nghĩ rằng đó là rõ ràng đối với tất cả mọi người rằng JAVA cần một cách để xác định các truststore mặc định, khi giao dịch với SSL, do đó thông tin này đã được chuyển sang JAVA một cách nào đó, vì vậy tôi nghĩ rằng "cập nhật "câu hỏi trong tay là làm thế nào để làm điều đó trong một cách làm-it-one-time-and-then-forget-everytime. Cách tốt nhất tôi có thể tìm thấy là bằng cách đặt biến môi trường ở mức HĐH của bạn, nếu biến môi trường này được đặt thì JAVA sẽ được khởi chạy theo mặc định với các đối số bạn đã cung cấp trong biến môi trường này.

Vì vậy, bạn không cần phải thiết lập-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacertsmỗi lần JVM được đưa ra, thay vì thiết lậpJAVA_TOOL_OPTIONSbiến môi trường "một lần" ở cấp hệ điều hành của bạn có giá trị như-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacertsvà sau đó bạn đã làm xong.

Dưới đây là đoạn trích từ # 1 trong tổng số "đọc thêm":

Khi biến môi trường này được thiết lập, JNI_CreateJavaVM chức năng (trong JNI Gọi API) prepends giá trị của biến môi trường đến các tùy chọn được cung cấp trong đối số JavaVMInitArgs của nó.

Chỉ báo trước xem ra được đề cập dưới đây, đoạn trích từ # 1 trong tổng số "đọc thêm":

Trong một số trường hợp tùy chọn này bị vô hiệu hóa vì lý do an ninh, cho Ví dụ, trên Solaris OS mà tùy chọn bị tắt khi người dùng có hiệu lực hoặc ID nhóm khác với ID thực.

Dưới đây là một báo trước (trích dẫn từ # 1 "Đọc thêm") để xem nhưng tôi nghĩ vì ngữ cảnh không phải về đối số lựa chọn VM nên không liên quan nhưng chỉ đề cập đến.

Kể từ biến môi trường này được kiểm tra tại thời điểm đó JNI_CreateJavaVM được gọi, nó không thể được sử dụng để làm tăng thêm dòng lệnh với các tùy chọn mà thông thường sẽ được xử lý bởi các phóng, cho dụ, VM lựa chọn bằng cách sử dụng tùy chọn -client hoặc the -erver.

bài đọc thêm:

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