Bagaimana saya bisa menggunakan kunci yang sama untuk SSH dan SSL (https)

12

Saya mencoba menginstal alat pengembangan untuk tim kecil, dan saya tidak bisa mendapatkan otentikasi dengan benar.

Karena kami adalah tim terdistribusi, server ada di internet. Dan saya ingin memiliki konfigurasi klien SSO + nol.

Jadi pada dasarnya git atas https + webdav tidak praktis, karena klien git hanya dapat menggunakan auth dasar tetapi tidak menyimpan kata sandi dan beberapa plugin IDE bahkan tidak meneruskan pertanyaan kata sandi di UI mereka.

Saya harus menggunakan git di ssh. Saya menginstal gitosis dan pada dasarnya bekerja dengan kunci asimetris, ok. Saya harus meminta setiap dev untuk menginstal kunci mereka, saya bisa melakukan itu, lupakan konfigurasi nol.

Lalu saya ingin pengembang mengakses alat web (wiki, tiket, dll.) Yang ada di https, tapi kali ini saya harus memberi mereka baik login / kata sandi atau kunci pribadi lain hanya karena format tidak kompatibel antara SSH dan SSL dan tempat untuk menyimpannya di OS tidak sama. Sekarang, saya harus melupakan SSO?

Apakah saya salah?

tepang
sumber

Jawaban:

11

Ringkasan TL; DR: Jika Anda memiliki kunci + sertifikat SSL / X.509, berikan saja file kunci pribadi tersebut ssh. Atau , jika Anda sudah memiliki kunci SSH id_rsa, gunakan saja dengan OpenSSL saat menandatangani CSR. Itu saja.


Anggap Anda memiliki sertifikat SSL pengguna joeuser.pemdan kunci privasinya joeuser.key.

Karena X.509 menggunakan kunci RSA standar, dan begitu juga SSH, Anda seharusnya bisa memberi tahu klien SSH Anda untuk menggunakan joeuser.key- satu-satunya syarat adalah bahwa itu harus dalam format yang dapat dimengerti.

Lihatlah bagian dalam joeuser.keydan periksa apakah terlihat seperti ini:

----- AWAL KUNCI PRIVATE RSA -----
MGECAQACEQCxQaFwijLYlXTOlwqnSW9PAgMBAAECEETwgqpzhX0IVhUa0OK0tgkC
CQDXPo7HDY3axQIJANLRsrFxClMDAghaZp7GwU2T1QIIMlVMo57Ihz8CCFSoKo3F
2L / 2
----- AKHIR KUNCI PRIVATE RSA -----

Di Open SSL , format ini disebut "PEM" (seperti dalam -outform pem) dan digunakan secara default. Format yang sama digunakan oleh Open SSH , dan dapat Anda gunakan ssh -i joeuser.keyuntuk terhubung.

Anda dapat mengekstrak kunci publik dalam id_rsa.pubformat OpenSSH (untuk dimasukkan ke dalam authorized_keys) dengan:

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

(Kunci publik yang sama dalam format PEM dapat diekstraksi openssl rsa -pubout, tetapi itu akan sedikit berguna.)


Jika Anda memiliki kunci DSA, itu harus bekerja sama persis seperti RSA.

pengguna1686
sumber
halo, terima kasih, tapi saya tahu saya bisa mengonversi satu format kunci ke format lain untuk setiap pengembang, tetapi masalah saya adalah menghindari konfigurasi sebanyak mungkin pada bagian mereka. Sejauh yang saya ingat (saya akui saya tidak memeriksa baru-baru ini) menambahkan sertifikat 509 untuk semua browser klien tidak sepele.
4
nraynaud: Mereka adalah pengembang . Jika mereka tidak dapat menginstal sertifikat X.509 ke browser favorit mereka (setidaknya dengan mengikuti TFM), itu sudah menakutkan.
user1686
...bagaimanapun. Untuk peramban berbasis NSS (Firefox, Mozilla, Epiphany) ada satu set alat baris perintah untuk dimodifikasi cert.db. Untuk Windows, sertifikat dapat diinstal menggunakan certutil atau (saya pikir) melalui kebijakan grup AD. SSH tidak memerlukan konfigurasi sama sekali, adil ssh-keygen -y -fdan membuang kedua file ke homedir pengguna.
user1686
4
mereka bukan pengembang, mereka baru lulus sekolah dan magang. Saya hanya memalu mereka dengan git, keamanan web, javascript, keamanan dan kode bersih. Saya hanya ingin membatasi hal-hal yang tidak terpusat pada pengembangan ini. (Selain itu, saya membenci orang yang memaksakan saya hal-hal konyol semacam ini, jadi saya hanya menghindari memaksakan hal itu pada orang lain)
2
Meskipun ini akan berhasil, saya akan menyarankan untuk tidak melakukannya. Anda menggunakan kunci yang sama, tetapi dengan cara yang berbeda, format yang berbeda. Saat pengguna menghasilkan sertifikat X.509 baru, mereka akan menggunakan kunci berbeda untuk SSH dan HTTPS. Masuk akal jika OpenSSH akan mendukung X.509 PKI penuh (seperti yang dilakukan OpenVPN, di mana Anda dapat menggunakan skrip untuk menautkan sertifikat ke LDAP dan memeriksa apakah pengguna berada dalam grup yang sesuai).
Hubert Kario
5

OpenSSH memiliki dukungan eksperimental untuk sertifikat x509 di sini:

http://roumenpetrov.info/openssh

Anda bisa mengeluarkan sertifikat x509 tunggal per pengguna dan menggunakannya untuk keduanya.

alih-alih memasukkan pubkey pengguna ke dalam otor_keys mereka, Anda dapat menentukan DN yang diizinkan dari sertifikat pengguna; dan Anda harus mengkonfigurasi server web / aplikasi web sehingga DN diterjemahkan ke nama pengguna.

b0fh
sumber
Terima kasih banyak, tetapi instalasi bahkan lebih buruk daripada konfigurasi yang saya pikir.
Maksud Anda menginstal versi openssh yang ditambal? mungkin sudah dikirimkan oleh distribusi Anda (saya tahu bahwa setidaknya Gentoo melakukannya). Tidak ada gunanya menggunakan kunci RSA yang sama untuk kedua aplikasi tetapi dengan format yang berbeda - Anda masih harus mengatur kunci publik ssh dari setiap pengguna dengan tangan. OTOH, dengan kunci x.509, Anda dapat memisahkan CA Anda, dan menambahkan pengguna baru ke SSH atau HTTPS dapat dilakukan tanpa sepengetahuan kunci publik mereka, Anda hanya perlu memilih kebijakan DN yang konsisten ...
b0fh
2
FYI, fungsi ini sekarang dalam versi arus utama OpenSSH.
Zoredache
1

Anda kurang beruntung - kunci SSH dan sertifikat SSL adalah hewan yang berbeda dan sejauh yang saya tahu mereka tidak dapat dipertukarkan.

Taruhan terbaik Anda mungkin adalah mengkonfigurasi penyimpanan kata sandi masuk tunggal / dibagikan / apa pun untuk alat web Anda & biarkan git / gitosis sebagai pulau otentikasi.

voretaq7
sumber