2012-02-08 48 views
13

Có thể yêu cầu tạo cặp khóa khách trong trình duyệt và gửi khóa công khai tới máy chủ CA được ký một cách minh bạch không? Sau đó cài đặt chứng chỉ đã ký trong trình duyệt của người dùng?Tạo chứng chỉ phía máy khách trong trình duyệt và đăng nhập vào máy chủ

Kịch bản:

  1. dùng mở https://examle.com/ trang web, nhận dạng máy chủ được xác minh
  2. dùng yêu cầu một sự sáng tạo tài khoản
  3. cặp khóa được tạo ra trong trình duyệt của người dùng và không tiết lộ cho máy chủ/CA
  4. Pubkey gửi đến máy chủ để ký
  5. Máy chủ ký chìa khóa và tạo chứng chỉ
  6. Chứng chỉ được gửi cho khách hàng và được cài đặt trong trình duyệt cùng với khóa riêng

Máy khách thời gian tiếp theo kết nối với máy chủ, danh tính của người đó được xác minh dựa trên chứng chỉ ứng dụng khách.

Sẽ thật tuyệt nếu máy chủ có thể buộc/gợi ý ứng dụng khách phải bảo vệ khóa riêng của mình bằng cách sử dụng mã hóa mật khẩu.

Tôi đã xem ngân hàng trực tuyến bằng cách sử dụng applet java cho tác vụ này. Có thể làm điều đó bằng cách sử dụng capabilites trình duyệt gốc không? Giải pháp Apache/PHP hoặc Node.js sẽ được chào đón.

Trả lời

14

Có, có thể. Tuy nhiên, không có giải pháp trình duyệt chéo.

  • Đối với Internet Explorer, bạn sẽ phải sử dụng một số các điều khiển ActiveX sử dụng X509Enrollment.CX509EnrollmentWebClassFactory hoặc CEnroll.CEnroll, tùy thuộc vào việc nó đang chạy trên Windows XP hoặc Vista/7. Thao tác này sẽ tạo yêu cầu chứng chỉ PKCS # 10 (mà bạn có thể cần phải bao bọc giữa các dấu phân tách truyền thống.
  • Đối với phần còn lại, bạn sẽ có thể sử dụng thẻ <keygen />. Đây là thẻ Netscape cũ, không chính thức HTML trước đây, nhưng nó đã làm cho nó thành HTML 5 (mặc dù MS đã nói rằng họ sẽ không hỗ trợ nó trong việc triển khai của họ) .Điều này sẽ tạo ra một cấu trúc SPKAC (tương tự như CSR). sử dụng CRMF functions.

Here is an example script rằng nên làm hầu hết công việc cho ActiveX hoặc Keygen.

01.235.

Khi máy chủ gửi lại chứng chỉ (có thể sau này), trình duyệt sẽ nhập nó vào cửa hàng của nó và kết hợp nó với khóa riêng mà nó đã tạo ra tại thời điểm yêu cầu.

Cách khóa cá nhân được bảo vệ sẽ phụ thuộc vào trình duyệt hoặc cơ chế lưu trữ chứng chỉ cơ bản. Trong Firefox, ví dụ, phải có mật khẩu chính trên thiết bị bảo mật.

Ở phía máy chủ, bạn có thể triển khai CA của riêng mình bằng các công cụ khác nhau. OpenSSL và BouncyCastle có thể xử lý PKCS # 10 và SPKAC. Dưới đây là BouncyCastle-based example (được liên kết với tập lệnh ở trên) và some code for CRMF.

Nếu bạn muốn một giải pháp làm sẵn, bạn có thể quan tâm đến một cái gì đó như OpenCA.

+0

làm cách nào để tôi sử dụng khóa cá nhân để giải mã dữ liệu (trong trường hợp của HTML5/kegen-tag)? – MhdSyrwan

+2

Phần tử '' không được dùng nữa theo [W3C] (http://w3c.github.io/html/sec-forms.html#elementdef-keygen), [WHATWG] (https: //html.spec.whatwg .org/multipage/forms.html # the-keygen-element) và [MDN] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen) và bị vô ý cố ý trong Chrome kể từ phiên bản 49. –

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