Cara menginstal sertifikat untuk baris perintah


72

Jadi di sekolah kita perlu memasang sertifikat untuk mengakses situs https. Di firefox, saya dapat mengimpor sertifikat. Namun, saya tidak bisa melakukannya dengan baris perintah. Misalnya, menjalankan git pushsaya mendapatkan:

fatal: unable to access 'https://github.com/user/repo': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

Bagaimana cara mengimpor sertifikat untuk menghapus ini? Impor harus dapat mengautentikasi untuk saya. Juga, ini adalah .cerfile, jadi jawaban untuk .crttidak akan berfungsi. Juga, saya tidak ingin langkah-langkah tentang cara mengatur git, seperti yang sudah saya lakukan. Saya ingin tahu apakah mungkin untuk melakukan itu. Atau bisakah saya menonaktifkan otentikasi dengan gitperintah sepenuhnya dan membuatnya mengabaikan sertifikat seperti apa yang dikatakan di sini? Juga, saya tidak ingin memuat halaman web, saya telah mengatur firefox untuk melakukan itu. Saya ingin git pushperintah untuk memberikan output standar seperti:

[master 630d087] message
 1 file changed, 93 insertions(+), 80 deletions(-)
 rewrite somefile (84%)
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 978 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To https://github.com/User/Repo.git
   851ae39..630d087  master -> master

Catatan: Saya menemukan itu git config --global http.sslverify false. Tapi saya ingin melihat jawaban untuk semuanya, bukan hanya git hack



@EricCarvalho tidak, itu untuk .crt. Saya perlu.cer
Universal Electricity

Apakah Anda memiliki masalah dengan perintah git Anda atau apa yang ingin Anda lakukan? Beri aku ping dengan @AB
AB

@ AB Saya ingin mengizinkan git menggunakan sertifikat yang diberikan sekolah kepada kami, alih-alih mencoba menggunakan sertifikat github. Atau jika itu tidak berhasil maka izinkan sertifikat sekolah untuk mengotentikasi bagi saya
Universal Electricity

Perhatikan bahwa ekstensi .crt dan .cer dapat dipertukarkan, cukup ubah ekstensi nama file, ekstensi tersebut memiliki bentuk yang sama.
Mike

Jawaban:


118

TL; DR

Agar semuanya berfungsi dan tidak hanya browser Anda, Anda perlu menambahkan sertifikat CA ke repositori CA tepercaya sistem.

Di ubuntu:

  • Pergi ke / usr / local / share / ca-sertifikat /
  • Buat folder baru, yaitu "sudo mkdir school"
  • Salin file .crt ke folder sekolah
  • Pastikan izin OK (755 untuk folder, 644 untuk file)
  • Jalankan "sudo update-ca-sertifikat"

Mengapa

Izinkan saya menjelaskan apa yang sedang terjadi juga, jadi poster lainnya melihat mengapa mereka tidak memerlukan sertifikat untuk menggunakan Github melalui HTTPS.

Apa yang terjadi di sana adalah bahwa sekolah Anda mencegat semua komunikasi SSL, mungkin untuk memantau mereka.

Untuk melakukan itu, yang mereka lakukan pada dasarnya adalah serangan "man in the middle", dan karenanya, browser Anda mengeluh bahwa ia tidak dapat memverifikasi sertifikat github. Proxy sekolah Anda mengeluarkan sertifikat github dan alih-alih memberikan sertifikat sendiri.

Ketika browser Anda mencoba memverifikasi sertifikat yang disediakan sekolah terhadap CA yang menandatangani sertifikat github, itu seharusnya gagal.

Jadi, agar koneksi SSL berfungsi di sekolah, Anda harus secara sadar menerima serangan "MITM" itu. Dan Anda melakukannya dengan menambahkan sertifikat CA sekolah sebagai yang tepercaya.

Ketika Anda mempercayai CA sekolah itu, verifikasi Anda terhadap sertifikat github palsu akan berfungsi, karena sertifikat github palsu akan diverifikasi oleh CA sekolah.

Sadarilah bahwa koneksi SSL tidak aman lagi karena administrator sekolah Anda akan dapat mencegat semua koneksi terenkripsi Anda.


Ini pada dasarnya jawaban yang sama dengan Mike tanpa dpkg-konfigurasi ulang yang seharusnya tidak diperlukan. Apa yang mungkin terjadi adalah bahwa git atau baris perintah lain tidak 100% standar mengenai verifikasi SSL mereka. Menggunakan apa yang Anda sebut "git hack" mungkin diperlukan untuk mengatasi "hack SSL" yang diterapkan sekolah Anda terlebih dahulu.
Telegrapher

Dan juga, perlu diketahui bahwa Anda memerlukan izin root untuk menjalankan perintah ini, sehingga perintah sudo harus berhasil, atau Anda tidak akan dapat memperbarui Otoritas Sertifikat sistem.
Telegrapher

2
Harap edit jawaban Anda untuk memberikan fakta tambahan - jangan tinggalkan di komentar.
guntbert

1
Saya percaya seharusnya begitu /usr/local/share/ca-certificates/. Lihat man update-ca-certificates, yang berbicara tentang ada daftar putih untuk /usr/share/ca-certificates/tetapi tentang bagaimana secara implisit mempercayai segala sesuatu di /usr/local/share/ca-certificates/direktori.
Ian Hickson

3
pada Ubuntu 16.04 setelah menambahkan CA ke /usr/local/share/ca-certificatessaya harus menggunakannya sudo dpkg-reconfigure ca-certificatesuntuk mengambil CA.
Matt L.

41

The ca-certificatespaket memiliki petunjuk di nya README.Debian:

Jika Anda ingin menginstal otoritas sertifikat lokal untuk dipercaya secara implisit, silakan memasukkan file sertifikat sebagai file tunggal berakhir dengan .crtmenjadi /usr/local/share/ca-certificates/dan re-run update-ca-certificates.

Perhatikan bahwa ia menyebutkan direktori yang berbeda dari jawaban lain di sini:

/usr/local/share/ca-certificates/

Setelah menyalin ke /usr/local/share/ca-certificates/Anda kemudian dapat memperbarui izin sertifikat dan berjalan sudo update-ca-certificatesseperti yang disebutkan dalam jawaban Telegraf. Anda akan melihat dalam output bahwa sertifikat ditambahkan.


4
Ini juga bekerja untuk saya di Ubuntu 16.04. Jalan di jawaban yang diterima tidak berhasil untuk saya.
Plazgoth

Ini harus menjadi jawaban yang diterima ini adalah solusi yang berfungsi untuk server ubuntu 16.04 LTS.
Lasitha Benaragama

15

Ekstensi .crt, .pem dan .cer dapat dipertukarkan, cukup ubah ekstensi nama file, mereka memiliki bentuk yang sama. Coba ini:

$ sudo cp mycert.cer /usr/share/ca-certificates/mycert.pem
$ sudo dpkg-reconfigure ca-certificates
$ sudo update-ca-certificates
$ git config --global http.sslCAInfo /usr/share/ca-certificates/mycert.pem

Yah meskipun ini benar, itu tidak membantu. Tetapi di masa depan itu mungkin membantu orang
Universal Electricity

Saya menambahkan satu baris lagi, coba itu untuk membuat git mempercayai sertifikat Anda, perhatikan bahwa saya mengubah cer. ke .pem dalam dua dari 4 langkah, sebagai gantinya .crt. @Unicorns Are Very Very Yummy
Mike

3
Jika file .CER Anda adalah biner (format DER) maka Anda tidak dapat hanya mengubah ekstensi. Gunakan openssl(1)untuk mengonversi sertifikat ke format PEM. Jalankan:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
Pengguna lengkung

1
@Archuser Mungkin perintah yang benar adalah ini:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi

5

Saya menggunakan kompilasi dari jawaban sebelumnya:

sudo -i
echo | openssl s_client -showcerts -servername site.example.com -connect example.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/, /-----END CERTIFICATE-----/' >> /usr/local/share/ca-certificates/ca-certificates.crt 
update-ca-certificates

Itu dapat dimodifikasi menjadi satu-liner.

Seringkali keduanya site.example.comdan example.commerupakan nama host yang sama.


3

Saya membaca semua solusi dan menyelesaikannya seperti ini;

sudo openssl x509 -inform DER -in certificate.cer -out certificate.crt

sudo mv certificate.crt /usr/share/ca-certificate/

cd /usr/share/ca-certificate

sudo chmod 644 certificate.crt

sudo dpkg-reconfigure ca-certificates

sudo update-ca-certificates

1

Saya mengalami masalah yang sama di mana menginstal sertifikat di firefox dan google chrome bekerja tetapi Memperbarui di terminal sudo apt-get updatetidak berfungsi dan memberikan 403 kesalahan IP Terlarang. Saya juga memiliki file sample.cer. Jadi pada dasarnya saya harus mengonversikannya menjadi .crt terlebih dahulu.

sudo openssl x509 -inform DER -in sample.cer -out sample.crt

Masih saat melakukan sudo dpkg-reconfigure ca-certificatessaya tidak dapat menemukan sertifikat yang diperlukan. Masalahnya dengan saya adalah saya menyalin sertifikat di tempat yang salah.

Alih-alih menyalinnya di $/usr/share/ca-certificates saya menyalinnya di $/usr/local/share/ca-certificates Tapi dengan menempatkannya di tempat yang tepat memecahkan masalah saya. Tetapi saya masih tidak dapat memperbarui paket atau menginstal paket baru.

Perbaikan cepat (untuk saya aktif):

Gunakan ftp bukan http

sudo sed -i s/http/ftp/ /etc/apt/sources.list && apt-get update

dan perintah di atas bekerja. Harap buat salinan file sources.list sebelum melakukan perubahan.

Jika ada yang tidak jelas atau tidak tepat tolong lakukan koreksi pada saya.


0

Untuk mengakses situs web dengan https, apakah Anda menggunakan browser CLI atau GUI, Anda tidak memerlukan sertifikat shool Anda.

Untuk menggunakan gitmelalui http, Anda perlu mendaftarkan kunci publik Anda di pengaturan profil Anda di GitHub .

Info lebih lanjut di sini . Ubah profil GitHub Anda di sini .


Coba ini:

sudo apt-get install w3m
w3m https://github.com/

... berfungsi tanpa sertifikat tambahan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.