Как настроить SSH-аутентификацию с помощью смарт-карты?

Как настроить SSH-аутентификацию с помощью смарт-карты?

Я хотел бы иметь возможность подключаться по SSH к своей машине, используя смарт-карту Gemalto .NET в качестве метода аутентификации. Как это можно сделать на машине Fedora 13 (или в стиле Red Hat)?

Вот примерные шаги, которые, по моему мнению, необходимы:

  1. Предоставление сертификата для смарт-карты (и, возможно, центра сертификации для его выпуска?)
  2. Получите сертификат на смарт-карту
  3. Настройте SSH-сервер для разрешения аутентификации с помощью смарт-карт и настройте его на использование определенного сертификата/CA.
  4. SSH-клиент с поддержкой смарт-карт (дополнительные баллы за бесплатный клиент на базе Windows)

решение1

Драйверы Gemalto теперь с открытым исходным кодом, я полагаю. У них есть исходный код на сайте.

Вам нужно будет настроить pamмодуль (я не уверен, как это сделать, но код, безусловно, есть). Я полагаю, что конфигурация pamпотребует сопоставления принципа сертификата с локальным идентификатором пользователя.

GDM, как я понимаю, теперь поддерживает смарт-карты, но я не уверен, как он это определяет. Я попробую поискать это позже (самый простой способ, вероятно, просто заглянуть в исходный gdmкод).

Конечно, все это требует pcscdи libpcscliteбыть установленным. Вам также нужно будет скопировать libgtop11dotnet.soв /usr/lib.

Исходный код для компиляции libgtop11dotnet.so:https://github.com/AbigailBuccaneer/libgtop11dotnet

решение2

Я бы рекомендовал kerberos. MIT выпускает клиент и сервер krb5.

vwduder, могли бы вы порекомендовать считыватель смарт-карт и источник карт, соответствующих стандарту FIPS-201?

http://csrc.nist.gov/publications/fips/fips201-1/FIPS-201-1-chng1.pdf

У меня есть копия на моем собственном сервере, но я не настолько популярен на этом stacktrace в данный момент, чтобы поделиться ею с вами. Вышеуказанное лишь немного менее надежно, чем наши собственные серверы, так что вы, вероятно, сможете получить ее у них ;)

[править] Теперь я достаточно популярен!

http://www.colliertech.org/state/FIPS-201-1-chng1.pdf

решение3

При использовании ключей RSA 1) и 2) тривиальны, потому что, как мы увидим в 3), фактический сертификат не имеет значения в этом контексте. Просто зайдите на cacert.org или сгенерируйте самоподписанный сертификат, и все готово.

Для 3) вам нужно будет извлечь ваш открытый ключ и установить его в $HOME/.ssh/authorized_keys. Обратите внимание на владельца файла и разрешения! (700 для .ssh, 600 для authorized_keys). Аутентификация открытого ключа на уровне хоста не рекомендуется, но оставлена ​​как упражнение для пытливых умов.

Что касается 4) вам следует обратить внимание на PuTTY SC (http://www.joebar.ch/puttysc/) или -предпочтительно- PuTTY-CAC (http://www.risacher.org/putty-cac/), который улучшает PuTTY SC за счет улучшенного алгоритма извлечения открытого ключа, а также включает поддержку Kerberos-GSSAPI из ветки разработки PuTTY.

решение4

Я сделал видео, демонстрирующее использование смарт-карты с сервером Linux с помощью PuttySC иSecureCRT. Посмотреть можно здесь:Как использовать SSH с помощью смарт-карты

Я не объясняю, как предоставить сертификат в карте, но если вы это сделаете, помните, что ключ администратора карты должен быть изменен с помощью Системы управления картами. Вам будет намного проще, если ваша компания предоставит вам смарт-карту, чтобы вам не пришлось беспокоиться об этой части.

После подготовки карты вам необходимо извлечь открытый ключ, а затем добавить его в ~/.sshd/authorized_key.

Для подключения к серверу можно использовать такие инструменты, как PuttySC или SecureCRT. Вам нужно будет получить библиотеку PSKC#11 для карты (либо от производителя смарт-карты, либо версию с открытым исходным кодом). Настройте инструмент SSH с библиотекой, он должен иметь возможность прочитать ее и найти сертификат.

При аутентификации инструмент запросит у вас PIN-код смарт-карты.

Связанный контент