2009-05-26 48 views
39

Tôi đang cố triển khai một ứng dụng Java trên trang web của mình. Tôi cũng cần ký tên, vì tôi cần truy cập vào clipboard. Tôi đã làm theo tất cả các hướng dẫn ký kết tôi có thể tìm thấy nhưng không có bất kỳ thành công nào. Dưới đây là những gì tôi đã thực hiện cho đến thời điểm này:Làm cách nào để đăng nhập một applet Java để sử dụng trong trình duyệt?

  • Đã viết một applet trong NetBeans. Nó chạy tốt trong trình xem applet.
  • Tạo một tệp .jar ra khỏi nó.
  • Tạo một giấy chứng nhận bằng cách làm này:
keytool -genkey -keyalg rsa -alias myKeyName 
keytool -export -alias myKeyName -file myCertName.crt 
  • Signed nó wtih jarsigner như thế này:
jarsigner "C:\my path\myJar.jar" myKeyName 
  • Made một file html chứa này:
<html> 
    <body> 
<applet code="my/path/name/myApplet.class" archive="../dist/myJar.jar"/> 
    </body> 
</html> 

Khi tôi mở tập tin đó html, tôi không bao giờ có được xác nhận an ninh hộp thoại (và do đó có được "java.security.AccessControlException: Truy cập bị từ chối "lỗi". Điều này xảy ra trên tất cả các trình duyệt.

Tôi có thiếu một bước không?

Trả lời

6

Có lẽ vì bạn đang mở một số tệp .class bên ngoài tệp jar?

Bằng cách đó, nó có thể không hiển thị cảnh báo. Tôi đã thử làm theo cách đó nhưng nó vẫn cho tôi thấy cảnh báo chứng chỉ và cho một trường hợp đơn giản nó thực sự ngăn cản tôi truy cập vào một lớp từ JAR với lớp tách biệt.

Có thể thiết lập hoặc tổ chức tệp cụ thể của bạn gây ra hành vi đó. Nếu bạn có thể bố trí chi tiết hơn, chúng tôi có thể giúp tốt hơn (hay đúng hơn là, hãy thử đặt tất cả các tệp .class đó vào một Jar đã ký khác và thêm nó vào kho lưu trữ "..., anotherJar.jar").

+0

Tôi đã sửa nó. Vấn đề là các tệp jar của tôi không được biên dịch theo cùng cách mà tôi đang tham chiếu đến các tệp lớp. Nó hoạt dộng bây giờ. Cảm ơn! – user107312

-1

Chỉnh sửa: Câu trả lời này là lịch sử. JDK9 dường như sẽ từ chối các applet. Tại thời điểm viết (1 tháng 1 năm 2017), bạn nên ký vào các applet nhưng không cung cấp thêm các đặc quyền, sau đó chuyển sang một công nghệ mới hơn.

Tôi khuyên bạn không nên ký mã. Nếu bạn đang chơi với an ninh của người khác, thì bạn thực sự nên biết bạn đang làm gì.

JTextComponent nên cho phép sao chép và dán văn bản nếu đủ.

jarsigner -verify sẽ kiểm tra xem bình của bạn đã được ký chưa. Bạn cũng có thể xem nhanh tệp kê khai và tệp trong phạm vi META-INF/.

Hộp thoại bật lên để tin cậy chứng chỉ có thể bị tắt. Trong thực hiện của Sun: mở Bảng điều khiển Java; chuyển đến tab Nâng cao; mở rộng nút Security; hai hộp kiểm hàng đầu phải là "Cho phép người dùng cấp quyền cho ngữ cảnh đã ký" và "Cho phép người dùng cấp quyền cho nội dung từ cơ quan không đáng tin cậy".

+0

Dựa trên các yêu cầu của tôi, mã phải được ký. Tôi đã kiểm tra tệp jar của mình và nó cho biết mọi thứ đều ổn. tệp lớp của tôi có nhãn là smk: chữ ký đã được xác minh, mục nhập được liệt kê trong tệp kê khai và ít nhất một chứng chỉ được tìm thấy trong kho khóa. Thư mục META-INF trông cũng ổn. Cài đặt cũng tốt trong bảng điều khiển của tôi. Tôi có thể xem các applet tự ký khác tốt. – user107312

+3

Trong sự công bằng, ký các applet (và làm việc với các chứng chỉ nói chung) có thể là một quá trình khá khó chịu. Nó không nhất thiết có nghĩa là người đăng không "biết họ đang làm gì" về mã số ... –

+0

Số người "biết họ đang làm gì" về an ninh dường như là khá nhỏ . –

1

Trước tiên, tôi khuyên bạn nên nhận được chứng chỉ ký mã hợp lệ. Bạn có thể nhận được chứng chỉ miễn phí từ Thawte. Mặc dù thường các certs này được sử dụng cho S/MIME, chúng cũng hợp lệ để ký mã.

Tùy chọn thứ hai là nhập chứng chỉ tự ký của bạn vào tệp cacert của JRE mà trình duyệt của bạn đang gọi.

Điều tiếp theo cần kiểm tra là đảm bảo trình duyệt của bạn đang chạy bình mới nhất. Một cách để làm điều này là luôn tăng số phiên bản của bạn. Tùy chọn khác là để bạn xóa bộ nhớ cache Java applet của bạn.Tôi thường xóa bộ nhớ cache của trình duyệt của mình, nhưng điều này không cần thiết.

+0

Tôi tin rằng vấn đề sử dụng chứng chỉ e-mail để ký mã đã được sửa. –

+0

Thawte đã ngừng cấp Chứng chỉ email cá nhân và hệ thống chứng nhận Web of Trust (WOT) – Massimo

1

Bạn nói:

Khi tôi mở tập tin đó html, tôi không bao giờ có được xác nhận an ninh hộp thoại ...

Bạn đang mở các tập tin từ hệ thống tập tin địa phương của bạn, hoặc qua một URL đến một máy chủ web lưu trữ các tập tin HTML và jar applet (s)? Đó có thể là lý do tại sao bạn không nhận được cảnh báo.

+0

Tôi đang mở từ hệ thống cục bộ của mình. Bạn đang nói rằng hộp thoại bảo mật sẽ không hiển thị nếu nó được mở cục bộ? Nếu điều này là đúng, có cách nào để làm cho nó xuất hiện cục bộ không? Nó sẽ làm cho thử nghiệm dự án của tôi dễ dàng hơn nhiều. Trong khi đó, tôi sẽ dùng thử trên máy chủ web để xem đây có phải là vấn đề không. – user107312

+0

Nó vẫn không hoạt động, khi được truy cập từ máy chủ web. Tôi chỉ cần tệp .class, tệp .jar và tệp .html của tôi, phải không? Tôi có cần bất kỳ tệp nào liên quan đến chứng chỉ không? – user107312

1

Đây là cách để ký vào các lọ của bạn và sau đó kiểm tra xem tất cả các tệp lớp được ký với kho khóa của bạn chưa.

#!/bin/bash 
KEYSTORE=/home/user/NetBeansProjects/sign/keystore 
FILES=`find /home/user/NetBeansProjects/Project/dist/ -name "*.jar"` 
for f in $FILES; 
    do echo password | /usr/bin/jarsigner -keystore $KEYSTORE -verbose $f myself; 
    echo "Signed $f"; 
    /usr/bin/jarsigner -verify -verbose -certs $f | grep X.509 | sort -u; 
done 
29

3 bước đơn giản

  1. keytool -genkey -keystore myKeyStore -alias tôi

  2. keytool -selfcert -keystore myKeyStore -alias tôi

  3. jarsigner -keystore myKeyStore jarfile .jar me

+1

'-keystore myKeyStore' thậm chí là tùy chọn, phải không? Tôi đã nhận được applet của tôi đã ký, theo cách đó, nhưng Clipboardproblem của tôi vẫn còn. Tuy nhiên các appletsigning tốt nhất (jarsigning) - hướng dẫn tôi tìm thấy trên web. :) –

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