Я добре розумію PKI з концептуальної точки зору - тобто приватні ключі / відкриті ключі - математика за ними, використання хешу та шифрування для підписання сертифіката, цифрове підписання транзакцій або документів тощо. Я також працював над проектами, де openssl Бібліотеки C використовувались із certs для забезпечення зв'язку та аутентифікації. Я також надзвичайно знайомий з інструментами командного рядка openssl.
Однак у мене дуже мало досвіду роботи з веб-проектами, що підтримуються PKI, і тому я намагаюся створити та кодувати персональний проект, щоб краще зрозуміти це.
Вимоги
Це веб-сайт банку. Усі користувачі Інтернет-банкінгу можуть використовувати будь-який сертифікат, виданий декількома відомими ЦА (verisign, Thawte, доручення тощо). Банк не несе відповідальності за придбання сертифікатів для користувача. Ці сертифікати будуть використані для аутентифікації на веб-сайті банків. Платформи / ОС тощо досі не закріплені.
Дизайн
Мені було цікаво, який найкращий спосіб зробити аутентифікацію.
Я бачив, що в Apache є спосіб ввімкнути двосторонній ssl - у цьому випадку, я думаю, що перехід на веб-сайт автоматично запитає сертифікат у користувача. Але я не впевнений, чи цього достатньо, тому що здається, що все, що він перевіряє, це те, чи сертифікат підписаний довіреною службою CA & також може бути, чи потрапляє він у білий список тематичних рядків сертифікатів тощо. Але цього недостатньо для банківської справи, оскільки вам потрібно мати можливість пов’язати банккусерид із сертифікатом.
Здається, у IIS є спосіб, яким я можу мати сертифікат, що зберігається для кожного користувача в Active Directory. Це я зрозумів, прочитавши кілька статей MSDN. Ви включаєте двосторонній SSL в IIS і тоді, коли користувач намагається перейти на веб-сайт, IIS надішле запит до браузера зі списком затверджених ЦС, і браузер дозволить користувачеві вибрати відповідний сертифікат зі свого сертифікату і надішле його до бекенда. Я припускаю, що IIS зробить 2 речі
- Переконайтеся, що користувач має приватний ключ, відповідний cert (за допомогою переговорів на обкладинці)
- На підставі картографічного відображення користувача AD, IIS повідомить ім’я користувача про програму.
Виконайте чіткість аутентифікації, зателефонувавши до функцій криптовалюти, а не залежно від веб-сервера.
- Покажіть екран користувача, куди він завантажує сертифікат, і додаток гарантує, що користувач має приватний ключ, відповідний cert (попросивши передню частину підписати рядок за допомогою cert).
- У додатку є база даних, деякі дані зберігаються, що дозволяє кожному користувачеві відображати його користувача. Це може бути
- цілий серт, що відповідає кожному користувачеві
- серійний номер CA та cert, що відповідає кожному ідентифікатору користувача.
Мені було цікаво, який метод є найпоширенішим? Які найкращі практики? Якщо мені варто піти з №3, які найкращі способи зробити це?
Щось, що також легко може працювати з додатками для смартфонів, буде додатковим бонусом.
Оновлення
Дозвольте мені уточнити моє твердження "кодуйте частину аутентифікації самостійно", оскільки деякі відповіді, схоже, вказують на те, що воно було неправильно зрозуміле - моє погане неясність.
Це не означає, що я сама пишу криптовалюту. Це просто означає, що я фактично буду називати криптопрограми явно, а не залежно від IIS або будь-якого іншого веб-сервера робити це неявно.