2008-08-26 36 views
9

Tôi muốn làm những gì myopenid làm - một khi bạn đã đăng nhập, bạn có thể nhấp vào một nút tạo ra bạn một chứng chỉ SSL; trình duyệt sau đó tải xuống chứng chỉ này và lưu trữ nó. Khi bạn quay lại yourid.myopenid.com, trình duyệt của bạn có thể sử dụng chứng chỉ được lưu trữ để xác thực để bạn không cần mật khẩu.Tôi làm cách nào để hỗ trợ xác thực Chứng chỉ ứng dụng khách SSL?

Vì vậy, câu hỏi của tôi là những gì được yêu cầu để làm việc này? Làm cách nào để tạo chứng chỉ? Làm cách nào để xác thực chúng khi chúng được hiển thị lại cho tôi?

Ngăn xếp của tôi là Rails trên Apache sử dụng Hành khách, nhưng tôi không quá cụ thể.

Trả lời

8

Đây thường được gọi là chứng chỉ phía ứng dụng khách.

Tôi chưa thực sự sử dụng nó nhưng có thể tìm thấy phiên bản sửa đổi bảo mật có thể sửa đổi tại đây here trông giống như sau của bạn.

Tôi thấy điều này qua Dr. Nic's post

2

Phụ thuộc vào máy chủ, nhưng là giải pháp đơn giản nhất mà tôi biết, sử dụng Apache:

FakeBasicAuth

"Khi tùy chọn này được kích hoạt, Tiêu đề Tên phân biệt (DN) của chứng chỉ máy khách X509 được dịch sang tên người dùng ủy quyền HTTP cơ bản, điều này có nghĩa là các phương thức xác thực Apache chuẩn có thể được sử dụng để kiểm soát truy cập. Tên người dùng chỉ là Chủ đề của Chứng chỉ X509 của Khách hàng (có thể được xác định bằng cách chạy lệnh openssl x509 của OpenSSL: openssl x509 -noout -subject -in certificate.crt). Lưu ý rằng không có mật khẩu thu được từ người sử dụng ... "

Không chắc về đường ray, nhưng các biến môi trường REMOTE_USER thông thường nên có thể truy cập một cách nào đó.

1

Nếu bạn muốn tạo chứng chỉ, bạn cần để làm cho khách hàng tạo ra một cặp khóa, và gửi cho bạn ít nhất là chìa khóa công cộng Bạn có thể làm điều này trong Firefox thông qua một cuộc gọi Javascript, nó là crypto.generateCRMFRequest.Tôi đoán có những phương pháp trình duyệt cụ thể có sẵn trong các trình duyệt khác quá. trước tiên, bạn cần tìm ra cách cấp chứng chỉ khi bạn nhận được khóa công khai.

Bạn có thể viết một cái gì đó lên máy chủ với OpenSSL, nhưng nó đã tích hợp sẵn hỗ trợ cho CSR, chứ không phải định dạng CRMF mà Firefox sẽ gửi cho bạn. Vì vậy, bạn cần phải viết một số mã để chuyển đổi CRMF thành CSR, điều này sẽ yêu cầu một số loại khả năng xử lý DER & hellip; Tôi chỉ trầy xước bề mặt ở đây — điều hành một CA, ngay cả đối với một ứng dụng đồ chơi, không phải là tầm thường.

Các giải pháp SSO như giải pháp OpenId và PKI trùng lặp, và có một sự thanh lịch trong PKI. Nhưng ma quỷ là trong các chi tiết, và có những lý do tốt tại sao cách tiếp cận này đã được khoảng một thời gian dài nhưng chỉ được đưa ra trong chính phủ và các ứng dụng quân sự.

Nếu bạn muốn theo đuổi điều này, hãy theo dõi một số câu hỏi cụ thể cho nền tảng mà bạn muốn phát triển dịch vụ CA của mình.

+0

Bạn chỉ có thể sử dụng phần tử keygen thay thế, http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#the-keygen-element – hendry

0

Tôi đã nghiên cứu giải pháp cho vấn đề này. Tôi muốn làm điều tương tự và tôi biết rất nhiều chủ sở hữu trang web khác muốn tính năng này, có hoặc không có nhà cung cấp bên thứ ba.

Tôi đã tạo thiết lập máy chủ cần thiết và plugin firefox để xử lý xác thực dựa trên chứng chỉ. Truy cập mypassfree.com để lấy plugin firefox miễn phí. Gửi email cho tôi (liên kết trên trang đó) cho các thiết lập máy chủ như tôi đã không đóng gói nó được nêu ra với một trình cài đặt đẹp.

thiết lập Server là Apache2 + OpenSSL + Perl (nhưng bạn có thể viết lại kịch bản perl trong ngôn ngữ bất kỳ)

Jonathan

0

Bạn có thể tạo một chứng chỉ trong trình duyệt của khách hàng sử dụng mã trình duyệt cụ thể. Xem this question

Bạn cũng có thể tạo chứng chỉ máy khách SSL phía máy chủ bằng OpenSSL trong Ruby (see this q). (Điều này sẽ làm việc trong bất kỳ trình duyệt nào không có mã trình duyệt cụ thể, nhưng máy chủ của bạn sẽ tạo khóa riêng của khách hàng, không lý tưởng cho những người thuần túy mật mã.)

Bạn sử dụng phương pháp nào để tạo chúng cấu hình máy chủ web của bạn để yêu cầu chứng chỉ ứng dụng khách. Xem the Apache docs để biết ví dụ.

+0

Tạo CSR (hoặc tương đương) hoạt động trong hầu hết các trình duyệt phổ biến (IE, FF, Chrome, ...), nhưng mã có xu hướng đặc trưng cho trình duyệt. Xem câu trả lời này: http://stackoverflow.com/a/9198400/372643 – Bruno

+0

Câu trả lời hay, Bruno - Tôi nghĩ đó là câu trả lời tốt hơn cho q này hơn bất kỳ hiện tại nào trên đây :-) – Rich

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