Перш за все, спробуйте зрозуміти, як працюють SSL (HTTPS) та HTTP-аутентифікація.
Звичайні методи аутентифікації HTTP (Digest, Basic та будь-які форми + схема аутентифікації на основі файлів cookie, яку ви можете впровадити поверх HTTP) самі по собі не є безпечними, оскільки вони надсилають інформацію про автентифікацію більш-менш чітким текстом. Незалежно від того, чи є дані в полях POST або заголовках, і чи застосовується базове кодування64, в цьому плані зовсім не має значення, пароль чітко видно для всіх, хто має доступ до мережевого трафіку. Це означає, що аутентифікація HTTP по ненадійному каналу марна: все, що потрібно, щоб зловмисник прочитав ваш пароль, - це невелике обнюхання мережі.
SSL реалізує захищений канал зв'язку через невід'ємно незахищений канал. Це працює приблизно так:
- Сервер надсилає підписаний сертифікат
- Клієнт підтверджує сертифікат щодо списку відомих хороших ключів підпису; підписи сертифікатів можуть бути ланцюговими, так що кожен вузол говорить "якщо підпис, який мене підписує, хороший, то я так і є", але в кінцевому підсумку ланцюг повинен вирішити один із декількох довірених авторитетів, попередньо налаштованих на клієнта.
- Клієнт використовує відкритий ключ шифрування сервера для надсилання загальної таємниці
- Сервер розшифровує загальну таємницю за допомогою приватного ключа (оскільки лише легітимний сервер має приватний ключ, інші сервери не зможуть розшифрувати спільний секрет)
- Клієнт надсилає фактичні дані запиту, зашифровані за допомогою спільного секрету
- Сервер розшифровує дані запиту, після чого надсилає зашифровану відповідь
- Клієнт розшифровує відповідь і представляє її користувачеві.
Зверніть увагу на кілька важливих моментів тут:
- Ланцюг сертифікатів дозволяє клієнтам переконатися, що сервер, з яким вони спілкуються, справжній, а не хтось перехоплює їх запити. Ось чому ви повинні придбати справжній сертифікат SSL, і чому браузери накидають на вас страхітливі попередження, коли ви потрапляєте на сайт, на якому використовується недійсний, закінчений термін чи неправильний сертифікат: все шифрування у світі не допомагає, якщо ви розмовляючи з невірною людиною.
- Публічне / приватне шифрування, яке використовується для обміну секретом, гарантує, що успішне спілкування працюватиме лише між цією певною парою клієнта та сервера: обнюхані мережеві пакети будуть зашифровані, і вони потребують приватного ключа сервера, щоб отримати дані.
- Для більшої частини запиту використовується симетричне шифрування, оскільки воно має значно нижчу ефективність, ніж шифрування приватного / відкритого ключа. Ключ (загальний секрет) обмінюється за допомогою шифрування приватного / відкритого ключа, оскільки це єдиний спосіб зробити це безпечним способом (за винятком транспортування його по окремому каналу, наприклад кур'єрській службі).
Тож очевидно, що тут задіяні деякі накладні витрати, але це не так вже й погано, як ви могли б подумати - це здебільшого на шкалі, коли "кинути на нього більше обладнання" - це відповідна відповідь, якщо тільки ви не готуєтесь до абсолютно великої кількості трафіку ( думаю, Google або Facebook). За звичайних обставин, тобто типового використання веб-додатків, накладні витрати SSL незначні, і, отже, як тільки у вас є будь-які конфіденційні дані, краще просто запустити все через SSL, включаючи ресурси. SSL також є єдиним життєздатним способом забезпечення HTTP-трафіку; інші методи просто не настільки стандартизовані і, таким чином, не підтримуються широко, і ви абсолютно не хочете реалізовувати ці речі самостійно, адже, чесно кажучи, просто занадто просто їх помилити.
TL; DR: Так, SSL + Basic Authentication - хороша ідея, так, вам потрібен захищений сервер (і дійсний сертифікат ), так, це трохи сповільнить справи, але ні, це не те, що потрібно турбуватися правильно зараз.