2013-09-26 178 views
18

Vụ này: Tôi đang duy trì một applet Java trong đó sử dụng các thư viện BouncyCastle bcpkix-jdk15on-149.jarbcprov-jdk15on-149.jar.BouncyCastle Cryptography nhà cung cấp thư viện sử dụng với applet trên Java 7u40

Sự cố xảy ra khi ứng dụng được chạy trên trình duyệt đã bật 7_u40 của JRE.
Hành vi đã thay đổi từ phiên bản 7_u25 theo cách luôn nhắc nhở cửa sổ phương thức như "Lời nhắc bảo mật cho ứng dụng sử dụng chứng chỉ tự ký" (không thể ẩn vĩnh viễn), chỉ cần tin tưởng bcprov.

https://www.java.com/en/download/help/appsecuritydialogs.xml

Theo như tôi biết, điều này là bởi vì các thư viện BC được ký với chứng BouncyCastle, do "Mã JCE Ký CA". Do đó, lib có thể thực hiện và hoạt động như một nhà cung cấp mật mã.

NHƯNG: JRE không thể xây dựng chuỗi chứng chỉ để tin cậy chữ ký. Nó cho thấy "cung cấp dịch vụ: UNKNOWN"

Tôi biết tôi có thể loại bỏ chữ ký và ký tên bởi bản thân mình (Tôi sở hữu một Thawte giấy chứng nhận dấu code):

  • nó hoạt động với bcpkix lib
  • nó không hoạt động với bcprov vì nó sẽ không được coi là nhà cung cấp mật mã hợp lệ (nó sẽ không được tin cậy bởi JRE).

Tôi có đúng không? Tôi có thể làm gì?
PS: Tôi googled rất nhiều để tìm cert gốc JCA (để đặt nó vào JRE truststore), mà không thành công ... Có cách nào để lấy CA gốc đó?

+0

Một số người nói với tôi ký tên vào thư viện bcprov (đã có chữ ký của BC) lần thứ hai với giấy chứng nhận của riêng tôi. Vấn đề là kết quả không thành công khi xác minh với "jarsigner". Vì vậy, nếu có ai biết cách đặt chữ ký khác vào một tệp JAR, hãy cho tôi biết –

Trả lời

21

Sau nhiều tìm kiếm và một số bài trong mailing list BC .... Tôi tìm thấy giải pháp, vì vậy tôi thả nó vào đây để người khác có thể phải đối mặt với vấn đề đó:

Các giải pháp về cơ bản là ký BC thư viện lần thứ hai với chứng chỉ của riêng tôi.
JAR cần chữ ký JCA để được tin cậy là nhà cung cấp mật mã, do đó, không xóa nó.
JAR cũng cần (ngoài ra) chữ ký mã để có thể chạy trong JVM (được JRE tin cậy).

Một điều cuối cùng, một số không tương thích xảy ra trên công nghệ chữ ký:

  • BC lib được ký bằng SHA1 tiêu hóa algorythm
  • jarsigner (trên máy tính của tôi) đang làm chữ ký với SHA256 tiêu hóa algorythm theo mặc định, dẫn đến thất bại xác minh.
  • Vì vậy, tôi phải yêu cầu jarsigner thực hiện theo cách SHA1.(Đối với một số lý do cả hai chữ ký phải nhất quán từ quan điểm đó)

Dưới đây là thông số kỳ diệu của lệnh jarsigner để thêm và làm cho nó xảy ra: -digestalg SHA1 lệnh

mẫu:

jarsigner -keystore ./mykeystore.jks -storepass myPass -digestalg SHA1 bcprov-jdk15on-149.jar myAlias 

... và bạn đã hoàn tất!

Các bài sau đây đã cho tôi lời khuyên: What prevents Java from verifying signed jars with multiple signature algorithms

+2

bạn là một vị thần trong số những người đàn ông –

+0

applet của tôi là một tệp jar, bao gồm các lớp từ tất cả các lọ khác bao gồm lâu đài bounty. bởi: java.io.IOException: lỗi xây dựng MAC: java.lang.SecurityException: JCE không thể xác thực nhà cung cấp BC , vui lòng tư vấn cách sử dụng jarsigner khi các lớp bc ở bên cạnh jar applet của tôi? – user884424

+1

Chỉ là một bình luận, trên hệ thống của tôi (Ubuntu 14.04 64 bit, OpenJDK 7) với bcprov-jdk15on v1.56, tôi phải ký nó với -digestalg SHA-256 để xác minh thành công. – ixM

0

Chúng tôi cũng có thể bao gồm các bài stackoverflow khác và câu trả lời đó đã giúp tôi:

Đưa dòng: Security.addProvider (org.bouncycastle mới. jce.provider.BouncyCastleProvider());

Giúp tôi loại bỏ ngoại lệ.

Nguồn: jce cannot authenticate the provider bc