akubintsev
@akubintsev
Опытный backend разработчик

Как лучше сделать аутентификацию пользователей по SSL сертификатам?

В принципе ответ на сабж в простейшем виде знаю (openssl, nginx и т.д.)
Но то ли я не могу сформулировать короткий вопрос для Гугла, то ли всегда остается за кадром один момент.
Самоподписанный серверный сертификат меня не очень устраивает. В теории ведь получается, что для получения клиентского сертификата на домене с верифицированным сертификатом, нужно иметь ключ CA, который естественно никто не даст.
Так вот есть ли какой-то способ обойти эту проблему?

Предполагается, что клиентские сертификаты будут постоянно добавляться и использоваться вместо логина и пароля для входа в свой личный кабинет.
  • Вопрос задан
  • 3608 просмотров
Решения вопроса 2
nmk2002
@nmk2002
работаю в ИБ
Если вы хотите сами создавать сертификаты пользователей, то ключ УЦ должен быть у вас. Иначе ничего подписать вы не сможете. Тогда ваши действия такие:
1. Создаете ключевую пару УЦ
2. Создаете самоподписанный сертификат УЦ
3. Указываете веб-серверу, что этот сертификат - сертификат УЦ для аутентификации пользователей (не знаю, как на nginx, делал только на apache)
4. Создаете ключевую пару пользователя(или он сам ее создает) и генерируете csr - запрос на сертификат.
5. Выпускаете сертификат, подписывая его вашим УЦ.
openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt
где
ca.crt - сертификат УЦ, из п.2
ca.key - закрытый ключ УЦ из п.1
client.csr - csr из п.4
client.crt - выходной файл сертификата пользователя.
6. Устанавилваете получившийся сертификат пользователю.
7. Настраиваете требование аутентификации по сертификатам.

Не забудьте сделать SSL сертификат самому серверу.

Можете развернуть полноценный PKI, для выпуска и управления сертифкатами пользователей. Это, конечно, значительно упростит жизнь.
Ответ написан
3vi1_0n3
@3vi1_0n3
Серверный сертификат может быть подписан кем угодно, на использование клиентских это никак не влияет, их можете подписывать своим CA, главное серверу указать потом его, чтобы клиентские считались валидными. Вот тут можно пример посмотреть, например. При использовании mutual аутентификации при помощи сертификатов может, конечно, возникнуть вопрос, если клиент не знает корневого сертификата, которым подписан серверный.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы