Jak mogę użyć tego samego klucza dla SSH i SSL (https)

12

Próbuję zainstalować narzędzia programistyczne dla małego zespołu i nie mogę uzyskać prawidłowego uwierzytelnienia.

Ponieważ jesteśmy zespołem rozproszonym, serwer jest w Internecie. I chciałbym mieć SSO + zerową konfigurację klienta.

Zasadniczo git przez https + webdav jest niepraktyczny, ponieważ klient git może korzystać tylko z podstawowego uwierzytelniania, ale nie zapisuje hasła, a niektóre wtyczki IDE nawet nie przekazują pytania o hasło w interfejsie użytkownika.

Muszę wtedy użyć git zamiast ssh. Zainstalowałem gitozę i to w zasadzie działa z asymetrycznymi kluczami, ok. Będę musiał poprosić każdego dewelopera o zainstalowanie klucza. Mogę to zrobić, zapomnij o zerowej konfiguracji.

Następnie chcę, aby programiści mieli dostęp do narzędzi internetowych (wiki, biletów itp.), Które są na https, ale tym razem muszę podać im login / hasło lub inny klucz prywatny tylko dlatego, że formaty nie są kompatybilne między SSH i SSL, a miejsce do przechowywania go w systemie operacyjnym nie jest takie samo. Teraz muszę zapomnieć o SSO?

Czy się mylę?

tshepang
źródło

Odpowiedzi:

11

Podsumowanie TL; DR: Jeśli masz certyfikat SSL / X.509 + klucz, po prostu podaj plik klucza prywatnego na adres ssh. Lub , jeśli masz już klucz SSH id_rsa, po prostu użyj go z OpenSSL podczas podpisywania CSR. To wszystko.


Załóżmy, że masz certyfikat SSL użytkownika joeuser.pemi jego klucz prywatny joeuser.key.

Ponieważ X.509 używa standardowych kluczy RSA, podobnie jak SSH, powinieneś być w stanie po prostu powiedzieć klientowi SSH, aby używał joeuser.key- jedynym wymaganiem jest to, aby był w zrozumiałym formacie.

Spójrz na wnętrze joeuser.keyi sprawdź, czy wygląda to tak:

----- ROZPOCZNIJ PRYWATNY KLUCZ RSA -----
MGECAQACEQCxQaFwijLYlXTOlwqnSW9PAgMBAAECEETwgqpzhX0IVhUa0OK0tgkC
CQDXPo7HDY3axQIJANLRsrFxClMDAghaZp7GwU2T1QIIMlVMo57Ihz8CCFSoKo3F
2L / 2
----- ZAKOŃCZ KLUCZ PRYWATNY -----

W Open SSL ten format nazywa się „PEM” (jak w -outform pem) i jest domyślnie używany. Ten sam format jest używany przez Open SSH i można go użyć ssh -i joeuser.keydo połączenia.

Możesz wyodrębnić klucz publiczny w id_rsa.pubformacie OpenSSH (do wprowadzenia authorized_keys) za pomocą:

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

(Ten sam klucz publiczny w formacie PEM można wyodrębnić openssl rsa -pubout, ale będzie on mało użyteczny.)


Jeśli masz klucz DSA, powinien on działać dokładnie tak samo jak RSA.

użytkownik1686
źródło
cześć, dziękuję, ale wiem, że mogę przekonwertować jeden format klucza na inny dla każdego programisty, ale moim problemem jest unikanie jak największej konfiguracji z ich strony. O ile pamiętam (przyznaję, że ostatnio nie sprawdzałem) dodanie certyfikatu 509 dla wszystkich przeglądarek klienta nie jest trywialne.
4
nraynaud: Są programistami . Jeśli nie mogą zainstalować certyfikatu X.509 w swojej ulubionej przeglądarce (przynajmniej postępując zgodnie z TFM), jest to już przerażające.
user1686,
...tak czy siak. W przypadku przeglądarek opartych na NSS (Firefox, Mozilla, Epiphany) istnieje zestaw narzędzi wiersza poleceń do modyfikacji cert.db. W systemie Windows certyfikaty można instalować przy użyciu certutil lub (myślę) za pomocą zasad grupy AD. SSH w ogóle nie wymaga konfiguracji, wystarczy ssh-keygen -y -fzrzucić oba pliki do katalogu domowego użytkownika.
user1686,
4
nie są programistami, są studentami pierwszego roku poza szkołą i stażystami. Po prostu wbijam je w git, bezpieczeństwo sieciowe, javascript, bezpieczeństwo i czysty kod. Chcę po prostu ograniczyć tego rodzaju rzeczy niezwiązane z rozwojem. (ponadto nienawidzę ludzi, którzy narzucają mi takie głupie rzeczy, więc po prostu
2
Chociaż to zadziała, odradzam to. Używasz tych samych kluczy, ale na różne sposoby, w różnych formatach. Gdy użytkownicy generują nowe certyfikaty X.509, i tak będą używać różnych kluczy dla SSH i HTTPS. Byłoby sensowne, gdyby OpenSSH obsługiwał pełną PKI X.509 (tak jak OpenVPN, gdzie można używać skryptów do łączenia certyfikatów z LDAP i sprawdzania, czy użytkownik należy do odpowiedniej grupy).
Hubert Kario
5

OpenSSH ma eksperymentalną obsługę certyfikatów x509 tutaj:

http://roumenpetrov.info/openssh

Możesz wystawić jeden certyfikat x509 na użytkownika i użyć go dla obu.

zamiast umieszczać klucz pubkey użytkownika w ich uprawnionych kluczach, możesz określić dozwolone nazwy wyróżniające certyfikatów użytkowników; i musisz skonfigurować serwer WWW / aplikację internetową, aby nazwa DN została przetłumaczona na nazwę użytkownika.

b0fh
źródło
Bardzo dziękuję, ale myślę, że instalacja jest jeszcze gorsza niż konfiguracja.
Masz na myśli instalację poprawionej wersji openssh? może być już wysłane przez twoją dystrybucję (wiem, że przynajmniej Gentoo to robi). Nie ma sensu używanie tego samego klucza RSA dla obu aplikacji, ale w innym formacie - nadal musisz ręcznie skonfigurować klucz publiczny ssh każdego użytkownika. OTOH, dzięki kluczom x.509 możesz oddzielić swój urząd certyfikacji, a dodawanie nowych użytkowników do SSH lub HTTPS można zrobić bez znajomości ich klucza publicznego, wystarczy wybrać spójną politykę DN ...
b0fh
2
Do Twojej dyspozycji, ta funkcjonalność jest teraz w głównej wersji OpenSSH.
Zoredache
1

Nie masz szczęścia - klucze SSH i certyfikaty SSL to różne zwierzęta i, o ile wiem, nie można ich zamieniać.

Najlepszym rozwiązaniem jest skonfigurowanie pojedynczego logowania / wspólnego magazynu haseł / cokolwiek dla narzędzi internetowych i pozostawienie git / gitosis jako wyspy uwierzytelniającej.

voretaq7
źródło