Tôi hiểu PKI một cách hợp lý từ quan điểm khái niệm - tức là khóa riêng / khóa chung - toán học đằng sau chúng, sử dụng hàm băm & mã hóa để ký chứng chỉ, Ký kết giao dịch hoặc tài liệu kỹ thuật số, v.v. Tôi cũng đã từng làm việc với các dự án mở Thư viện C đã được sử dụng với certs để bảo mật thông tin liên lạc và xác thực. Tôi cũng cực kỳ quen thuộc với các công cụ dòng lệnh openssl.
Tuy nhiên, tôi có rất ít kinh nghiệm với các dự án hỗ trợ PKI dựa trên web và do đó tôi đang cố gắng thiết kế và viết mã dự án cá nhân để hiểu rõ hơn về điều này.
Những yêu cầu
Đây là trang web cho một ngân hàng. Tất cả người dùng Internet Banking đều được phép sử dụng bất kỳ chứng chỉ nào được cấp bởi một vài CA đã biết (verisign, Thawte, ủy thác, v.v.). Ngân hàng không chịu trách nhiệm mua sắm chứng chỉ cho người dùng. Những chứng chỉ này sẽ được sử dụng để xác thực cho trang web của ngân hàng. Các nền tảng / hệ điều hành vv vẫn chưa được sửa.
Thiết kế
Tôi đã tự hỏi cách tốt nhất để xác thực là gì.
Tôi thấy rằng Apache có một cách để kích hoạt ssl 2 chiều - trong trường hợp này, tôi nghĩ rằng việc điều hướng đến trang web sẽ tự động yêu cầu chứng nhận từ người dùng. Nhưng tôi không chắc liệu điều này có đủ hay không vì dường như tất cả những gì nó xác minh là liệu chứng chỉ có được ký bởi một CA đáng tin cậy hay không và cũng có thể là liệu nó có nằm trong danh sách trắng các dòng chủ đề của chứng chỉ hay không, nhưng điều này là không đủ đối với trường hợp ngân hàng vì bạn cần có khả năng liên kết ngân hàng với chứng chỉ.
IIS dường như có một cách mà tôi có thể có một chứng chỉ được lưu trữ cho mỗi người dùng trong Active Directory. Đây là những gì tôi hiểu từ việc đọc một vài bài báo MSDN. Bạn bật SSL 2 chiều trong IIS và sau đó khi người dùng cố điều hướng đến trang web, IIS sẽ gửi yêu cầu tới trình duyệt với danh sách các CA được phê duyệt và trình duyệt sẽ cho phép người dùng chọn chứng chỉ phù hợp từ cửa hàng chứng nhận của mình và gửi nó để phụ trợ. Tôi giả sử rằng IIS sẽ làm 2 việc
- Đảm bảo rằng người dùng có khóa riêng tương ứng với chứng chỉ (theo các cuộc đàm phán bao trùm)
- Dựa trên Ánh xạ chứng chỉ người dùng quảng cáo, IIS sẽ báo cáo tên người dùng cho ứng dụng.
Thực hiện khám phá xác thực bằng cách gọi các chức năng của tiền điện tử thay vì tùy thuộc vào máy chủ web để thực hiện.
- Hiển thị màn hình người dùng nơi anh ta tải lên một chứng chỉ và ứng dụng đảm bảo người dùng có khóa riêng tương ứng với chứng chỉ (bằng cách yêu cầu giao diện người dùng ký một số chuỗi bằng chứng chỉ).
- Ứng dụng này có một cơ sở dữ liệu một số dữ liệu được lưu trữ cho phép mỗi người dùng được ánh xạ tới userid của mình. Điều này có thể
- toàn bộ chứng chỉ tương ứng với mỗi userid
- số sê-ri CA và cert tương ứng với mỗi id người dùng.
Tôi đã tự hỏi đó là phương pháp thường được sử dụng? Các thực hành tốt nhất là gì? Nếu tôi nên đi với số 3, cách tốt nhất để làm điều này là gì?
Một cái gì đó cũng có thể dễ dàng làm việc với các ứng dụng điện thoại thông minh sẽ là một phần thưởng bổ sung.
Cập nhật
Hãy để tôi làm rõ tuyên bố của mình "mã phần xác thực" bởi vì một số câu trả lời dường như chỉ ra rằng nó đã bị hiểu sai - điều xấu của tôi là không rõ ràng.
Điều này không có nghĩa là tôi tự viết tiền điện tử. Nó chỉ có nghĩa là tôi thực sự sẽ gọi các thói quen của tiền điện tử một cách rõ ràng thay vì phụ thuộc vào IIS hoặc bất kỳ máy chủ web nào khác làm điều đó một cách ngầm định.