Najlepsza lokalizacja dla certyfikatu SSL i kluczy prywatnych na Ubuntu


62

W Ubuntu wygląda na to, że najlepszym miejscem na klucz prywatny używany do podpisywania certyfikatu (do użytku przez nginx) jest /etc/ssl/private/

Ta odpowiedź dodaje, że certyfikat powinien wejść, /etc/ssl/certs/ale wydaje się, że jest to niebezpieczne miejsce. Czy .crtpliki muszą być bezpieczne, czy są uważane za publiczne?


19
Jeśli chcesz, możesz postawić .crtna tablicy reklamowej Times Square.
ceejayoz,

Odpowiedzi:


48

Plik .crt jest wysyłany do wszystkiego, co się łączy; to jest publiczne. ( chown root:rooti chmod 644)

Aby dodać do lokalizacji klucza prywatnego; upewnij się, że odpowiednio go zabezpieczysz i masz go tam. ( chown root:ssl-certi chmod 640)


Zastanawiam się, dlaczego ten katalog nie jest domyślnie g + s.
Collin Anderson

2
Nie musi tak być; katalog ma numer 0750, więc żaden użytkownik spoza grupy nie może przejść do katalogu w celu odczytania plików.
womble

2
Wygląda na to, że ssl-cert jest nieprawidłową nazwą grupy na Ubuntu. Może powinien to być chown root: root zamiast
Atifm

1
@Atifm Grupa certyfikatów ssl-cert została wprowadzona 16.04 lub 18.04. Nie pamiętam który.
DylanYoung

1
@DylanYoung: na pewno jest obecny na Ubuntu 12.04 i wierzę, że jest tworzony przez pakiet ssl-cert, używany, być może, między innymi, do tworzenia samopodpisanych certyfikatów
snakeoil

35

Naprawdę nie ma znaczenia, gdzie je umieścisz, pod warunkiem, że odpowiednio zabezpieczysz swoje pliki kluczy prywatnych . Certyfikat publiczny publiczny; ochrona nie jest wymagana - uprawnienia serwera lub w inny sposób.

Aby rozwinąć odpowiedź, nie używam domyślnej lokalizacji /etc/ssl.
Łatwiej jest mi przechowywać wszystkie moje w osobnym obszarze z powodu kopii zapasowych i innych powodów.

W przypadku Apache SSL trzymam mój w /etc/apache2/ssl/privatepodobnym „obszarze głównym” /etc/.

Przykładowa konfiguracja

Ten post jest skierowany do Ubuntu (Debian) + Apache, ale powinien działać na większości systemów - po
prostu zastosuj uprawnienia i zaktualizuj lokalizację / ścieżkę w danej konfiguracji (apache / nginx / etc).
Jeśli pliki kluczy SSL są odpowiednio chronione (katalog i pliki), wszystko będzie dobrze. Uwaga notatki!

Utwórz katalogi:

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

Uwaga:
chmod 710obsługuje ssl-certgrupę w systemie Ubuntu.
(Patrz komentarze)
Ustawienie uprawnienia na 700on /etc/apache2/ssl/privaterównież będzie działać dobrze.

Umieść pliki SSL:

Umieść publiczne certyfikaty www ssl wraz z certyfikatami pośrednimi w /etc/apache2/ssl
Włóż prywatne klucze ssl/etc/apache2/ssl/private

Ustaw właściciela:

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

Uwaga:
Jeśli nie masz grupy ssl-cert , po prostu użyj „root: root” w linii powyżej lub pomiń drugą linię.

Ustaw uprawnienia:

Certyfikaty publiczne

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

Klucz prywatny

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

Uwaga:
Uprawnienie grupy jest ustawione na CZYTAJ (640) z powodu grupy Ubuntu ssl-cert. „600” też jest w porządku.

Włącz moduł Apache SSL

sudo a2enmod ssl

Edytuj dowolne pliki strony Apache i włącz

(patrz ostatni akapit) *

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

Uruchom ponownie usługę Apache2

sudo service apache2 restart

lub

sudo systemctl restart apache2.service

Gotowy. Przetestuj swoją nową witrynę SSL.

* Znów wykracza to poza pytanie, ale możesz skopiować domyślny plik konfiguracyjny strony Apache SSL ( sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/mysiteexample-ssl.conf) jako dobry punkt wyjścia / przykład domyślnych dyrektyw / katalogów zwykle używanych w prostym („Ubuntu / Debian) pliku Apache / SSL” conf ” . Zwykle wskazuje na samopodpisany certyfikat SSL + klucz (snakeoil), pakiety CA, a także wspólne dyrektywy używane dla danej witryny SSL.

Po skopiowaniu, po prostu edytuj nowy plik .conf i dodaj / usuń / zaktualizuj go w razie potrzeby z nowymi informacjami / ścieżkami powyżej, a następnie uruchom, sudo a2ensite mysiteexample-sslaby go włączyć.


nie jestem pewien, dlaczego sugerujesz ustawienie 710 dla uprawnień dla / etc / apache2 / ssl / private. Ustawienie bitu wykonania dla katalogu (dla grupy) bez ustawienia bitu odczytu dla katalogu (dla grupy) nie ma dla mnie większego sensu. Czy chciałeś ustawić go na 750?
chriv

@chriv Właśnie ustawiłem uprawnienia na podstawie tego, jak widzę konfigurację w domyślnym obszarze SSL Ubuntu. Zobacz / etc / ssl / certs & / etc / ssl / private & ssl-certs group use. Zobacz stackoverflow.com/a/23408897/503621
bshea

1
Bardzo ładne i szczegółowe wyjaśnienie ogólnego pytania z wieloma możliwymi odpowiedziami. Dziękuję Ci. Aby dodać kilka rzeczy, twoja <VirtualHost *:443>sekcja sites-available/mysite.confpowinna zawierać takie certyfikaty:SSLEngine on SSLCertificateFile /etc/apache2/ssl/mysite.crt SSLCertificateKeyFile /etc/apache2/ssl/private/mysite.key
George Dimitriadis

BTW - Możliwe jest również połączenie konfiguracji: 80 i: 443 w jednym pliku „.conf” Apache. I tak przekierowuję wszystko, co uderza w port: 80 na: 443 / SSL. Możliwe jest również umieszczenie podstawowych ustawień SSL w pliku .conf i utworzenie dodatkowego „szczegółowego” pliku ustawień SSL (na przykład w celu ustawienia używanych szyfrów / etc) i po prostu dołączenie go do wszystkich plików .conf poza obszarami wirtualnymi. Używam tych ustawień, by trochę „zahartować” SSL i umieszczam go w każdej wirtualnej witrynie .conf. W ten sposób mogę uzyskać certyfikat A + w SSL Labs .
bshea

10

Wszystkie odpowiedzi tutaj wydają się OK, ale chcę wspomnieć o jednej rzeczy, którą znalazłem, jest problemem ... Jeśli musisz połączyć swój certyfikat z półproduktami lub rootami, aby wymyślić plik łańcucha, nie wkładaj tego /etc/ssl/certs, ponieważ kiedy c_rehashjest uruchamiany, może tworzyć skróty symboliczne do twoich certyfikatów ze względu na ich korzenie lub półprodukty.

Później, jeśli twoje certyfikaty wygasły i je usunąłeś, i nie wiesz, aby je ponownie uruchomić c_rehash, być może zepsułeś dowiązania symboliczne skrótu w twoim /etc/ssl/certskatalogu, a dziwne rzeczy zaczynają się dziać, gdy twoja lokalna maszyna próbuje się połączyć ze sobą przez SSL i nie może znaleźć korzeni do sprawdzenia. Na przykład z curl nagle zacząłem dostawać:

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

Krótko po oczyszczeniu niektórych starych plików .crt i połączonych plików .pem, w których miałem /etc/ssl/certs.

Przechowywanie przynajmniej łańcuchów w innym miejscu pozwala uniknąć tego problemu. Skończyło się /etc/ssl/local_certsna tym, że trzymałem moje certyfikaty i łańcuchy, aby nie zgubić się w bałaganie certyfikatów CA, które znajdziesz w/etc/ssl/certs


2

Nie ma tak naprawdę niebezpiecznego miejsca, jeśli uprawnienia dla poszczególnych plików / katalogów są ustawione na coś podobnego, chown root :0 private.keya chmod 600 private.keywięc tylko root może je odczytać. CSR i pliki certyfikatów są mniej wrażliwe, jak mówisz.

Przy tych uprawnieniach wymienione ścieżki i / usr / local / ssl powinny być w porządku.


1
Często aplikacje uzyskujące dostęp do kluczy prywatnych działają jako użytkownicy inni niż root. Sugeruję utrzymanie dostępu dla grupy ssl-cert.
Shane Madden

1
Zrozumiano, ale serwery internetowe, takie jak Apache, spawnują główny proces „nadrzędny” i przy założeniu, że jest to również nginx.
Jonathan Ross

1

Lokalizacje są poprawne:

  • /etc/ssl/certs/do .crtpliku
  • /etc/ssl/privatedo .keypliku

Właściciel musi być root:rootdla obu (użyj, sudo chmod root:root <file>aby zmienić w razie potrzeby).

Uprawnienia :

  • 644do .crtpliku
  • 600do .keypliku

To zadziała dla nginx.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.