Как я могу использовать один и тот же ключ для SSH и SSL (https)

12

Я пытаюсь установить инструменты разработки для небольшой команды, и я не могу получить правильную аутентификацию.

Поскольку мы распределенная команда, сервер находится в Интернете. И я хотел бы иметь SSO + нулевую конфигурацию клиента.

Таким образом, git over https + webdav нецелесообразен, потому что git-клиент может использовать только базовую аутентификацию, но не сохраняет пароль, а некоторые плагины IDE даже не пересылают вопрос о пароле в своем пользовательском интерфейсе.

Я должен использовать GIT над SSH тогда. Я установил Gitosis, и он в основном работает с асимметричными клавишами, хорошо. Я должен попросить каждого разработчика установить свой ключ, я могу это сделать, не обращая внимания на нулевую конфигурацию.

Затем я хочу, чтобы разработчики получили доступ к веб-инструментам (вики, тикетам и т. Д.), Которые находятся на https, но на этот раз я должен предоставить им либо логин / пароль, либо другой закрытый ключ только потому, что форматы несовместимы между SSH и SSL и место для его хранения в ОС не совпадают. Теперь я должен забыть о SSO?

Я ошибаюсь?

tshepang
источник

Ответы:

11

TL; DR итоги: если у вас есть сертификат SSL + X.509 + ключ, просто передайте файл закрытого ключа ssh. Или , если у вас уже есть ключ SSH id_rsa, просто используйте его с OpenSSL при подписании CSR. Это все.


Предположим, у вас есть SSL-сертификат пользователя joeuser.pemи его закрытый ключ joeuser.key.

Поскольку X.509 использует стандартные ключи RSA, а также SSH, вы должны просто указать своему SSH-клиенту использовать его joeuser.key- единственное требование - чтобы он был в понятном формате.

Посмотрите на внутренности joeuser.keyи проверьте, выглядит ли это примерно так:

----- НАЧАТЬ RSA ЧАСТНЫЙ КЛЮЧ -----
MGECAQACEQCxQaFwijLYlXTOlwqnSW9PAgMBAAECEETwgqpzhX0IVhUa0OK0tgkC
CQDXPo7HDY3axQIJANLRsrFxClMDAghaZp7GwU2T1QIIMlVMo57Ihz8CCFSoKo3F
2L / 2
----- END RSA ЧАСТНЫЙ КЛЮЧ -----

В Open SSL этот формат называется «PEM» (как в -outform pem) и используется по умолчанию. Тот же формат используется Open SSH , и вы можете использовать ssh -i joeuser.keyдля подключения.

Вы можете извлечь открытый ключ в id_rsa.pubформате OpenSSH (для вставки authorized_keys) с помощью:

ssh-keygen -y -f joeuser.key> joeuser-ssh.pub

(Можно извлечь тот же открытый ключ в формате PEM openssl rsa -pubout, но он будет бесполезен.)


Если у вас есть ключ DSA, он должен работать точно так же, как и RSA.

user1686
источник
привет, спасибо, но я знаю, что могу преобразовать один формат ключа в другой для каждого разработчика, но моя проблема - избежать как можно большего количества настроек с их стороны. Насколько я помню (признаюсь, я недавно не проверял), добавление сертификата 509 для всех клиентских браузеров не является тривиальным.
4
nraynaud: они разработчики . Если они не могут установить сертификат X.509 в свой любимый браузер (по крайней мере, следуя TFM), это уже страшно.
user1686
...тем не мение. Для браузеров на основе NSS (Firefox, Mozilla, Epiphany) есть набор инструментов командной строки для изменения cert.db. Для Windows сертификаты могут быть установлены с помощью certutil или (я думаю) через групповую политику AD. SSH вообще не требует настройки, просто ssh-keygen -y -fвыгрузите оба файла в домашний каталог пользователя.
user1686
4
они не разработчики, они первокурсники из школы и интерны. Я просто бью их с помощью git, веб-безопасности, javascript, безопасности и чистого кода. Я просто хочу ограничить такого рода не ориентированные на развитие вещи. (более того, я ненавижу людей, которые навязывают мне такие глупости, поэтому я просто
2
Пока это будет работать, я советую против этого. Вы используете одни и те же ключи, но по-разному, разные форматы. Когда пользователи генерируют новые сертификаты X.509, они все равно будут использовать разные ключи для SSH и HTTPS. Было бы целесообразно, если бы OpenSSH поддерживал полную PKI X.509 (как это делает OpenVPN, где вы можете использовать скрипты для связи сертификатов с LDAP и проверки, входит ли пользователь в соответствующую группу).
Хьюберт Карио
5

OpenSSH имеет экспериментальную поддержку сертификатов x509 здесь:

http://roumenpetrov.info/openssh

Вы можете выдать один сертификат x509 для каждого пользователя и использовать их для обоих.

вместо того, чтобы помещать пользователя pubkey в его авторизованные ключи, вы можете указать разрешенные DN пользовательских сертификатов; и вы должны настроить веб-сервер / веб-приложение так, чтобы DN транслировалось в имя пользователя.

b0fh
источник
Большое спасибо, но я думаю, что установка еще хуже этой конфигурации.
Вы имеете ввиду установку пропатченной версии openssh? он может быть уже отправлен вашим дистрибутивом (я знаю, что по крайней мере Gentoo делает). Нет смысла использовать один и тот же ключ RSA для обоих приложений, но с другим форматом - вам все равно придется вручную устанавливать открытый ключ ssh для каждого пользователя. OTOH, с ключами x.509, вы можете хранить свой CA отдельно, а добавлять новых пользователей в SSH или HTTPS можно без знания их открытого ключа, вам нужно только выбрать согласованную политику DN ...
b0fh
2
К вашему сведению, эта функциональность теперь в основной версии OpenSSH.
Zoredache
1

Вам в значительной степени не повезло - ключи SSH и сертификаты SSL - разные животные, и, насколько я знаю, они не являются взаимозаменяемыми.

Лучше всего, вероятно, настроить единый вход / хранилище общих паролей / что угодно для ваших веб-инструментов и оставить git / gitosis как остров аутентификации.

voretaq7
источник