Lokasi terbaik untuk sertifikat SSL dan kunci pribadi di Ubuntu

62

Di Ubuntu, sepertinya tempat terbaik untuk kunci pribadi yang digunakan untuk menandatangani sertifikat (untuk digunakan oleh nginx) ada di /etc/ssl/private/

Jawaban ini menambahkan bahwa sertifikat harus masuk /etc/ssl/certs/tetapi sepertinya tempat yang tidak aman. Apakah .crtfile perlu dijaga agar tetap aman atau dianggap publik?

Adam Nelson
sumber
19
Anda bisa meletakkannya .crtdi papan iklan Times Square, jika mau.
ceejayoz

Jawaban:

48

File .crt dikirim ke semua yang terhubung; ini adalah publik. ( chown root:rootdan chmod 644)

Untuk menambahkan ke lokasi kunci pribadi; pastikan Anda mengamankannya dengan benar serta memilikinya di sana. ( chown root:ssl-certdan chmod 640)

Shane Madden
sumber
Saya bertanya-tanya mengapa direktori itu bukan g + s secara default.
Collin Anderson
2
Tidak harus; direktori tersebut adalah 0750, jadi tidak ada cara bagi pengguna yang tidak ada dalam grup untuk berpindah ke direktori untuk membaca file.
womble
2
Sepertinya ssl-cert adalah nama grup yang tidak valid di ubuntu. Mungkin seharusnya chown root: root gantinya
Atifm
1
@Atifm Grup sertifikat ssl-cert diperkenalkan pada 16.04 atau 18.04. Saya tidak ingat yang mana.
DylanYoung
1
@DylanYoung: pasti hadir di Ubuntu 12,04, dan saya yakin itu dibuat oleh paket ssl-cert, dulu, mungkin antara lain, membuat sertifikat snakeoil yang ditandatangani sendiri
MestreLion
35

Tidak masalah di mana Anda meletakkannya selama Anda benar-benar melindungi file kunci pribadi Anda . The sertifikat publik adalah publik; tidak diperlukan perlindungan - hak istimewa server atau sebaliknya.

Untuk memperluas jawabannya, saya tidak menggunakan lokasi default /etc/ssl.
Lebih mudah bagi saya untuk menyimpan semua tambang di area terpisah karena cadangan + alasan lain.

Untuk Apache SSL, saya menyimpan bagian saya di /etc/apache2/ssl/privateatau "area root" yang serupa /etc/.

Contoh Pengaturan

Posting ini diarahkan ke Ubuntu (Debian) + Apache, tetapi harus bekerja pada kebanyakan sistem -
Cukup terapkan izin dan perbarui lokasi / jalur dalam konfigurasi yang diberikan (apache / nginx / etc).
Jika file kunci SSL dilindungi dengan benar (direktori & file), Anda akan baik-baik saja. Catat catatannya!

Buat direktori:

sudo mkdir /etc/apache2/ssl
sudo mkdir /etc/apache2/ssl/private
sudo chmod 755 /etc/apache2/ssl
sudo chmod 710 /etc/apache2/ssl/private

Catatan:
chmod 710mendukung ssl-certgrup di bawah Ubuntu.
(Lihat komentar)
Menetapkan izin 700pada /etc/apache2/ssl/privatejuga akan berfungsi dengan baik.

Tempatkan file SSL:

Masukkan sertifikat www ssl publik bersama dengan sertifikat antara di /etc/apache2/ssl
Masukkan kunci privat ssl/etc/apache2/ssl/private

Tetapkan pemilik:

sudo chown -R root:root /etc/apache2/ssl/
sudo chown -R root:ssl-cert /etc/apache2/ssl/private/

Catatan:
Jika Anda tidak memiliki grup ssl-cert , cukup gunakan 'root: root' di baris di atas atau lewati baris ke-2.

Tetapkan izin:

Sertifikat Publik

sudo chmod 644 /etc/apache2/ssl/*.crt

Kunci Pribadi

sudo chmod 640 /etc/apache2/ssl/private/*.key

Catatan:
Izin grup diatur ke BACA (640) karena grup ssl-cert Ubuntu. '600' juga baik-baik saja.

Aktifkan modul Apache SSL

sudo a2enmod ssl

Edit semua file situs Apache dan aktifkan

(lihat paragraf terakhir) *

sudo nano /etc/apache/sites-available/mysiteexample-ssl.conf
sudo a2ensite mysiteexample-ssl
#             ^^^^^^^^^^^^^^^^^ <-Substitute your ".conf" filename(s)

Mulai ulang layanan Apache2

sudo service apache2 restart

atau

sudo systemctl restart apache2.service

Selesai. Uji situs SSL baru Anda.

* Sekali lagi ini melampaui pertanyaan, tetapi Anda dapat menyalin file konfigurasi situs Apache SSL default ( sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/mysiteexample-ssl.conf) sebagai titik awal / contoh arahan / direktori default yang biasanya digunakan di bawah file Apache / SSL 'conf' yang sederhana (Ubuntu / Debian) . Biasanya menunjuk ke kunci + sertifikat SSL yang ditandatangani sendiri (snakeoil), bundel CA, serta arahan umum yang digunakan untuk situs SSL tertentu.

Setelah menyalin, cukup edit file .conf baru dan tambahkan / hapus / perbarui sesuai kebutuhan dengan jalur / informasi baru di atas kemudian jalankan sudo a2ensite mysiteexample-ssluntuk mengaktifkannya.

bshea
sumber
tidak yakin mengapa Anda menyarankan pengaturan 710 untuk izin untuk / etc / apache2 / ssl / private. Mengatur bit eksekusi untuk direktori (untuk grup) tanpa mengatur bit baca untuk direktori (untuk grup) tidak masuk akal bagi saya. Apakah Anda bermaksud menetapkannya sebagai 750?
chriv
@chriv Saya baru saja mengatur izin berdasarkan bagaimana saya melihatnya pengaturan di bawah area SSL default Ubuntu. Lihat / etc / ssl / certs & / etc / ssl / private & ssl-certs penggunaan grup. Lihat stackoverflow.com/a/23408897/503621
bshea
1
Penjelasan yang sangat bagus dan terperinci untuk pertanyaan umum dengan banyak jawaban yang mungkin. Terima kasih. Hanya untuk menambahkan beberapa hal, <VirtualHost *:443>bagian Anda di Anda sites-available/mysite.confharus menyertakan sertifikat seperti:SSLEngine on SSLCertificateFile /etc/apache2/ssl/mysite.crt SSLCertificateKeyFile /etc/apache2/ssl/private/mysite.key
George Dimitriadis
BTW - Anda juga dapat menggabungkan: 80 dan: 443 konfigurasi Anda dalam satu file ".conf" Apache. Saya mengalihkan apa pun yang mengenai port: 80 di: 443 / SSL. Dimungkinkan juga untuk meletakkan pengaturan SSL dasar dalam file .conf dan membuat file pengaturan SSL 'terperinci' tambahan (untuk mengatur cipher yang digunakan / etc misalnya) dan hanya memasukkannya dalam semua file .conf Anda di luar area virtual. Saya menggunakan pengaturan ini untuk 'mengeraskan' SSL sedikit dan saya memasukkannya di setiap situs virtual .conf. Saya bisa mendapatkan A + di Lab SSL dengan cara ini.
bshea
10

Semua jawaban di sini tampaknya OK, tetapi saya ingin menyebutkan satu hal yang saya temukan adalah masalah ... Jika Anda harus menyatukan sertifikat Anda dengan perantara atau root untuk membuat file berantai, jangan masukkan itu /etc/ssl/certs, karena ketika c_rehashdijalankan, ini dapat membuat hash symlink ke sertifikat Anda karena akar atau perantara di dalamnya.

Kemudian di kemudian hari jika sertifikat Anda telah kedaluwarsa dan Anda menghapusnya, dan tidak tahu untuk menjalankan kembali c_rehash, Anda mungkin telah merusak symlink hash di /etc/ssl/certsdirektori Anda , dan hal-hal aneh mulai terjadi ketika mesin lokal Anda mencoba untuk terhubung dengan dirinya sendiri melalui SSL, dan tidak dapat menemukan akar untuk divalidasi. Sebagai contoh, dengan curl saya tiba-tiba mulai mendapatkan:

curl: (60) SSL certificate problem: unable to get issuer certificate

Segera setelah membersihkan beberapa file .crt dan .pem lama yang sudah saya miliki /etc/ssl/certs.

Menyimpan setidaknya rantai Anda di tempat lain menghindari masalah ini. Saya akhirnya membuat /etc/ssl/local_certsuntuk memegang sertifikat dan rantai saya, sehingga mereka tidak hilang dalam kekacauan sertifikat CA yang akan Anda temukan/etc/ssl/certs

barryp
sumber
2

Sebenarnya tidak ada tempat yang tidak aman jika izin untuk masing-masing file / direktori diatur ke sesuatu seperti chown root :0 private.keydan chmod 600 private.keysehingga hanya root yang dapat membacanya. CSR dan file sertifikat kurang sensitif seperti yang Anda katakan.

Dengan izin itu, jalur yang Anda sebutkan dan / usr / local / ssl akan baik-baik saja.

Jonathan Ross
sumber
1
Seringkali, aplikasi yang mengakses kunci privat berjalan sebagai pengguna non-root. Saya sarankan menjaga akses untuk grup ssl-cert.
Shane Madden
1
Dipahami tetapi server web seperti Apache menelurkan proses 'induk' root dan menganggap nginx juga ini terkait.
Jonathan Ross
1

Lokasi sudah benar:

  • /etc/ssl/certs/untuk .crtfile
  • /etc/ssl/privateuntuk .keyfile

Pemilik harus root:rootuntuk keduanya (gunakan sudo chmod root:root <file>untuk mengubah jika diperlukan).

Izin :

  • 644untuk .crtfile
  • 600untuk .keyfile

Ini akan berhasil nginx.

Rael Gugelmin Cunha
sumber