2010-04-09 14 views
13

Ứng dụng Java đã ký của tôi đã hoạt động tốt cho đến khi cập nhật Java 19. Bây giờ, một số người dùng trên Java Update 19 báo cáo một thông báo bảo mật java cho biết applet của chúng tôi có chứa cả mã đã ký và chưa ký.Tại sao Java cho tôi biết applet của tôi chứa cả mã đã ký và chưa ký?

Quá trình tạo Applet của chúng tôi là như sau:

  1. sạch và xây dựng dự án applet trong Netbeans IDE.
  2. Mở tệp jar Applet trong WinRAR và thêm trình điều khiển JDBC mysql bắt buộc vào tệp jar.
  3. Đăng nhập tệp jar applet.

Ai đó có thể vui lòng cho tôi biết cách xác định mã nào được ký và mã nào không được ký trong applet của chúng tôi? Có cách nào tốt hơn để bao gồm tệp jar trình điều khiển JDBC mysql trong applet của chúng ta ngoài việc sao chép nội dung tệp jar vào tệp jar applet của chúng ta không?

Cảm ơn

Trả lời

11

Một số điều cần thử:

  • Đến bảng điều khiển plugin java ($ JAVA_HOME/bin/ControlPanel).
  • Chuyển đến tab Advanced.
  • Mở rộng Debug
  • Kiểm tra Enable tracing, Enable logging, và Show applet lifecycle exceptions
  • Mở rộng Java console
  • Kiểm tra Show console
  • Bấm OK (hoặc Close, tùy thuộc vào hệ điều hành của bạn)

Khi applet của bạn tải Bàn điều khiển Java sẽ mở ra. Click vào nó và ngay lập tức bấm '5'. Nó sẽ ghi lại các lọ và các lớp đang được tìm nạp để chạy applet của bạn. Một nơi nào đó trong này nên có một thông báo chỉ ra những gì lọ hoặc các lớp học được coi là "unsigned". Nếu bạn bỏ lỡ nó lần đầu tiên, chỉ cần tải lại cửa sổ để thử lại.

+1

Thêm mục này để tham khảo trong tương lai. Java 1.6u20 chứa một sửa chữa được ghi lại là "cảnh báo mã hỗn hợp cho class.getResource (" directory/") trong 1.6.0_19". –

+2

Một số nơi trong này phải có một thông báo cho biết những cái lọ hoặc các lớp được xem là "unsigned" Thông điệp là gì? an ninh: Istrusted: null false ?? – simpatico

+1

cho những gì nó có giá trị, vấn đề này đã có cho một máy tính trên 1.6.0_20, sau đó biến mất với 1.6.0_24, bây giờ là trở lại cho 1.6.0_25-b06. Cái quái gì thế !? cả hai lọ của chúng tôi đều được ký với cùng một chứng nhận giống như cách đó cùng một lúc, tôi không hiểu ... – jlarson

2

Trộn tin cậy và mã không tin cậy với nhau là một lỗ hổng đã được cố định trong 6u19 (CPU hiện tại/SSR phát hành tại thời điểm viết bài). See the docs. Chặn kết hợp hoặc sử dụng trình gỡ lỗi sẽ hiển thị vị trí của sự cố.

+1

hữu ích: Thư viện tin cậy: true – simpatico

+3

@simpatico Hữu ích nếu bạn biết mình đang làm gì. Vượt quá nguy hiểm nếu bạn không. –

14

EDIT: Do lỗi trong Java 7 Update 45, bạn không nên thêm Trusted-Library vào tệp kê khai của mình. Chỉ cần thêm thuộc tính mới Caller-Allowable-Codebase. Xem câu hỏi này để biết thêm thông tin: Java applet manifest - Allow all Caller-Allowable-Codebase

Java 7 Update 21 được phát hành vào ngày 16 tháng 4 năm 2013 và khiến applet của chúng tôi bắt đầu hiển thị hộp thoại cảnh báo này.

Mỗi ghi chú phát hành: Kể từ JDK 7u21, mã JavaScript gọi mã trong một applet đặc quyền được coi là hộp hỗn hợp và cảnh báo được nêu ra nếu các tệp JAR đã ký không được gắn thẻ với thuộc tính Trusted-Library.

Để khắc phục điều này, hãy chỉnh sửa tệp kê khai của bạn.Tệp mf và thêm một dòng như sau:

Trusted-Library: true 

Bạn nên cẩn thận trước khi thực hiện việc này. Nếu applet đã ký của bạn có thể được gọi từ javascript thì người dùng độc hại có thể làm những việc có hại trên máy tính của người dùng của bạn.

Một cách nhanh chóng để bảo vệ applet của bạn là ngăn không cho nó chạy trên các trang web khác. Làm điều này bằng cách đặt mã trong phương thức init() xem getCodeBase().getHost() và ném ngoại lệ nếu nó không khớp với trang web của bạn.

Java 7 Update 25 giới thiệu một cách khác để giới hạn các trang web nơi ứng dụng của bạn có thể chạy. Bạn có thể thiết lập các thuộc tính codebase trong file manifest của bạn như thế này:

Codebase: test.example.com www.example.com 

Java 7 Update 45 (releated ngày 16 tháng 10 năm 2013) giới thiệu nhiều thay đổi đối với hệ thống LiveConnect (javascript-to-applet cầu) có thể gây ra dấu nhắc khác . Bài viết này nói về những thay đổi 7u45: https://blogs.oracle.com/java-platform-group/entry/liveconnect_changes_in_7u45

Về cơ bản bạn cũng sẽ muốn thêm dòng sau vào file manifest của bạn để tránh các hướng dẫn:

Caller-Allowable-Codebase: test.example.com www.example.com 

Nếu bạn đang bán một sản phẩm mà bao gồm một applet và bạn không biết tên miền nào có thể được triển khai trên đó, bạn có thể điền * tại đây.

+0

Nếu bạn đang bán phần mềm đóng gói bao gồm một applet java đã ký, điều này có nghĩa là bây giờ bạn sẽ cần bao gồm mỗi miền mà applet của bạn có thể chạy trong phân đoạn codebase của người gọi cho phép không? Trong môi trường phần mềm đóng gói, thậm chí bạn có thể không biết tên miền mà khách hàng của bạn sẽ chạy trên applet của bạn? – muzzamo

+0

Vâng, tôi đoán bạn phải có Caller-Allowable-Codebase trong applet và nó phải chứa những tên miền đó. Thật là điền rồ. Một vài điều tôi có thể nghĩ đến để giải quyết vấn đề này: Bên trong applet Java bạn có thể thực thi javascript và tôi đã không thấy các hạn chế với điều đó. Bạn có thể có thể làm việc lại mã của bạn để các tương tác JS-Java được bắt đầu từ bên trong applet. Tùy chọn khác là tự động hóa việc tạo JAR của applet với các miền chính xác như là một phần của quá trình cài đặt. –

+0

@muzzamo Tôi vừa thử nó với * trong Caller-Allowable-Codebase và đã hoạt động. –