2015-09-11 14 views
9

Hiện tại, chúng tôi đã phát triển một hệ thống có thể ký số hóa tài liệu bằng cách sử dụng applet java. Tuy nhiên với lệnh cấm các applet dưới chrome, chúng tôi đang tìm kiếm một giải pháp thay thế cho việc ký số.Cách thay thế cho applet ký kỹ thuật số dưới Chrome

Tại thời điểm ký hoạt động theo cách sau:

  1. Một HTTP GET được gửi đến một servlet để có được những tài liệu có nghĩa là sẽ được ký kết;
  2. Ứng dụng này được khởi động, trình điều khiển chữ ký số được trích xuất từ ​​hệ thống tệp và người dùng nhập mã PIN;
  3. Applet nhận chuỗi chứng nhận, kiểm tra CRL/OSCP và ký vào tài liệu;
  4. Ứng dụng này gửi một bài đăng nhiều phần với tệp đã được ký vào một servlet trong hệ thống.

Một giải pháp thay thế sẽ là nhập chứng chỉ vào trình duyệt và sử dụng j để thực hiện việc ký. Nhưng đó không phải là giải pháp thân thiện với người dùng.

Một giải pháp khác có thể là yêu cầu người dùng tải xuống một chương trình chạy bằng JNLP tải xuống và ký tài liệu và tự động tải lên bằng cách sử dụng POST nhiều byte HTTP. Nhược điểm của phương pháp này là yêu cầu các tương tác người dùng bổ sung (hành động tải xuống) và chúng tôi mất phiên http trình duyệt, vì vậy chúng tôi phải xác thực lại.

Điều nào khả thi hơn? Bạn có thể nghĩ thay thế?

+2

Ngay bây giờ không có giải pháp khả thi vì không có cơ chế để truy cập khóa được lưu trữ trong hệ thống (lưu trữ chứng chỉ Windows, lưu trữ chứng chỉ MacOS v.v.) hoặc trong mô-đun phần cứng khác với Java hoặc ActiveX hoặc tương tự. Dự kiến ​​tiêu chuẩn WebCrypto sẽ hỗ trợ truy cập khóa ở đâu đó vào năm tới. Cho đến lúc đó, giải pháp khả thi duy nhất là đề nghị người dùng cài đặt và sử dụng Firefox. Cá nhân tôi đã gỡ cài đặt Chrome làm thư rác sau khi họ chặn Java. –

Trả lời

5

Tất cả bài đăng bên dưới đề xuất ký kết dựa trên RSA.

Bạn có thể đăng nhập bằng Javascript + Web Crypto api thuần túy.

Những điểm mấu chốt được chiết xuất chủ chốt với HTML5 <file> thẻ, sử dụng thư viện forge js để đối phó với các phím và băm và phong thánh xml với deoxxa và sử dụng mật mã web cho dấu/xác minh (ngoài ra, giả mạo cũng có thể đăng ký/xác minh nhưng crypto web nhanh hơn).

Nếu bạn đang ký xml với quy trình chuẩn hóa độc quyền, hãy sử dụng deoxxa (bạn nên duyệt trước khi sử dụng). Nếu bạn đăng nhập xml và cần sử dụng tính hợp quy hóa bao gồm my fork of deoxxa (được lưu trữ trên máy chủ gitlab riêng). Tôi quá lười biếng để đổi tên độc quyền thành tập tin .js của tôi thực hiện bao gồm, hãy tin tôi) Ví dụ về cách sử dụng forge + deoxxa + html5_p12_file_read trong signJs, verifyJs files.

Ngoài ra, giả mạo hỗ trợ ký các tệp nhị phân (CMS hoặc kiểu đặt tên cũ hơn là PKCS # 7) nhưng tệp JSP của tôi không có ví dụ như vậy. Về OCSP và kiểm tra chuỗi trong JS - I opened the issue trong giả mạo, nhưng có vẻ quá khó để xử lý các giao thức CRL/OCSP và TSP trong JS, đó là lý do tại sao bạn có thể đăng nhập vào JS, nhưng xác minh có thể được chia nhỏ - kiểm tra băm làm trong JS (forge) sử dụng và mã bổ sung cho thấy trong JSP của tôi) nhưng kiểm tra thông minh như CRL, chuỗi vv làm trong dịch vụ web của bạn - bạn có thể trích xuất X509Certificate và gửi nó đến dịch vụ web của bạn và sử dụng bouncycastle hoặc bất kỳ thư viện nào khác để làm kiểm tra thông minh. X509Certificate là thông tin công khai, không có vấn đề trong việc gửi nó đến dịch vụ, nhưng kiểm tra tiêu hóa yêu cầu tệp và bạn có thể không muốn gửi tệp đến dịch vụ và do đó sử dụng giả mạo để kiểm tra thông báo được hiển thị trong tệp verifyJS của tôi.

Mã JS của tôi không được cấu trúc lại và thậm chí không có trong OOP và hiện tại tôi không làm việc trên dự án đó nhưng trên một số giai đoạn tôi đã hoàn toàn làm việc xml RSA siging với khóa p12 trong hệ thống tệp.

JSP mới nhất trong repo của tôi sử dụng giả mạo chỉ để phân tích tệp p12 và cung cấp khóa từ API Crypto Web nhưng lịch sử repo của tôi cũng có dấu/xác minh Javascript thuần túy (nếu bạn không thích api mã hóa web). xem lịch sử của các nhánh dự án.

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