Найкраще місце для сертифіката SSL та приватних ключів на Ubuntu


62

В Ubuntu, схоже, найкраще місце для приватного ключа, який використовується для підписання сертифіката (для використання nginx) /etc/ssl/private/

Ця відповідь додає, що сертифікат має бути введений, /etc/ssl/certs/але це здається небезпечним місцем. Чи .crtпотрібно зберігати файли в безпеці чи вони вважаються загальнодоступними?


19
.crtЯкщо ви хочете, ви можете розмістити свій рекламний щит на Таймс-сквер.
ceejayoz

Відповіді:


48

.Crt файл надсилається до всього, що підключається; це публічно. ( chown root:rootі chmod 644)

Щоб додати до місця закритого ключа; переконайтесь, що ви її правильно закріпили, а також мати його там. ( chown root:ssl-certі chmod 640)


Цікаво, чому цей каталог за замовчуванням не g + s.
Колін Андерсон

2
Це не потрібно; каталог - 0750, тому жоден користувач, який не входить до групи, не може перейти до каталогу, щоб прочитати файли.
живіт

2
Схоже, ssl-cert - недійсне ім'я групи в ubuntu. Можливо, це має бути корінь кореня: замість цього root
Atifm

1
@Atifm Група ssl-cert cert була введена або 16.04, або 18.04. Я не можу пригадати, який.
DylanYoung

1
@DylanYoung: він присутній на Ubuntu 12.04 точно, і я вважаю, що він створений пакетом ssl-cert, який використовується, можливо, серед іншого, для створення самопідписаних сертифікатів на
зміїне масло

35

Дійсно, не важливо, куди ви їх розмістите, якщо ви належним чином захищаєте файли приватного ключа . Відкритий сертифікат є публічним; не потрібен захист - привілеї сервера чи інше.

Щоб розширити відповідь, я не використовую розташування за замовчуванням /etc/ssl.
Мені простіше тримати все моє в окремій зоні через резервне копіювання + інші причини.

Для Apache SSL я зберігаю шахту в /etc/apache2/ssl/privateподібній кореневій області /etc/.

Приклад налаштування

Ця публікація спрямована на Ubuntu (Debian) + Apache, але повинна працювати в більшості систем.
Просто застосуйте дозволи та оновіть місце розташування / шлях у заданому конфігурації (apache / nginx / тощо).
Якщо файли ключів SSL захищені правильно (каталог та файли), у вас все буде в порядку. Зверніть увагу на замітки!

Створення каталогів:

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

Примітка:
chmod 710підтримує ssl-certгрупу під Ubuntu.
(Див. Коментарі)
Установлення дозволу на 700ввімкнення /etc/apache2/ssl/privateтакож буде добре працювати.

Розмістіть файли SSL:

Помістіть загальнодоступні сертифікати www ssl разом з проміжними сертифікатами в /etc/apache2/ssl
Помістити приватні ключі ssl у/etc/apache2/ssl/private

Встановити власника:

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

Примітка:
Якщо у вас немає групи ssl-cert , просто використовуйте 'root: root' у рядку вище або пропустіть другий рядок.

Встановити дозволи:

Публічний сертифікат

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

Приватний ключ

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

Примітка.
Для дозволу групи встановлено значення READ (640) завдяки Ubuntu ssl-cert групі. "600" також добре.

Увімкніть модуль SSL Apache

sudo a2enmod ssl

Відредагуйте будь-які файли сайту Apache та увімкніть

(див. останній абзац) *

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

Перезапустіть сервіс Apache2

sudo service apache2 restart

або

sudo systemctl restart apache2.service

Зроблено. Перевірте свій новий SSL-сайт.

* Знову це виходить за межі питання, але ви можете скопіювати файл конфігурації сайту Apache SSL за умовчанням ( sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/mysiteexample-ssl.conf) як гарну вихідну точку / приклад директив / каталогів за замовчуванням, які зазвичай використовуються у простому (конфіденційному) файлі Apache / SSL Apache / SSL . Зазвичай він вказує на самопідписаний сертифікат SSL + ключ (snakeoil), пакети CA, а також загальні директиви, які використовуються для певного сайту SSL.

Після копіювання просто відредагуйте новий .conf файл і додайте / видаліть / оновіть його за необхідності з новою інформацією / шляхами вище та виконайте, sudo a2ensite mysiteexample-sslщоб увімкнути його.


не впевнений, чому ви б запропонували встановити 710 для дозволів для / etc / apache2 / ssl / private. Встановлення біта виконання для каталогу (для групи) без встановлення біта читання для каталогу (для групи) для мене не має великого сенсу. Ви мали на увазі встановити його як 750?
chriv

@chriv Я просто встановив дозволи, виходячи з того, як я бачу його налаштування в області SSL за замовчуванням Ubuntu. Див. / Etc / ssl / certs & / etc / ssl / приватне використання & ssl-certs групи. Див stackoverflow.com/a/23408897/503621
bshea

1
Дуже приємно і детально пояснити загальне запитання з багатьма можливими відповідями. Дякую. Просто для додання кількох речей, ваш <VirtualHost *:443>розділ sites-available/mysite.confповинен містити сертифікати, як-от так:SSLEngine on SSLCertificateFile /etc/apache2/ssl/mysite.crt SSLCertificateKeyFile /etc/apache2/ssl/private/mysite.key
Джордж Димитріадіс,

BTW - Можна також просто поєднати ваші: 80 та: 443 конфігурації в одному файлі Apache ".conf". Я переспрямовую все, що потрапляє на порт: 80 за адресою: 443 / SSL. Також можна помістити основні настройки SSL у файл .conf та створити додатковий файл "детальних" параметрів SSL (наприклад, встановити використовувані шифри / тощо) та просто включити його у всі ваші .conf-файли за межами віртуальних областей. Я використовую ці налаштування, щоб трохи «загартувати» SSL і включаю його у кожен віртуальний сайт .conf. Я можу отримати + в лабораторіях SSL таким чином.
bshea

10

Усі відповіді тут здаються нормальними, але я хочу зазначити одне, що я виявив - це проблема ... Якщо вам доведеться об'єднати свою програму з проміжними продуктами або коренями, щоб створити файл ланцюга, не вкладайте цього /etc/ssl/certs, тому що коли c_rehashзапускається, він може створювати хеш-посилання на ваші серти через коріння чи проміжні продукти в них.

Потім пізніше по дорозі, якщо термін дії ваших сертифікатів закінчився, і ви видалите їх, і не знаєте, як повторно запустити c_rehash, можливо, ви зламали хеш-посилання у вашому /etc/ssl/certsкаталозі, і дивні речі починають відбуватися, коли ваша локальна машина намагається підключитися до себе через SSL, і він не може знайти корені для перевірки. Наприклад, із завитком я раптом почав отримувати:

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

Незабаром після очищення деяких старих .crt та з’єднаних .pem-файлів у мене були /etc/ssl/certs.

Зберігання принаймні своїх ланцюгів де-небудь ще уникає цієї проблеми. Я в кінцевому підсумку робив, /etc/ssl/local_certsщоб утримувати мої серти і ланцюги, щоб вони не загубилися в безладі церков ЦА, які ви знайдете в/etc/ssl/certs


2

Там не зовсім небезпечне місце , якщо дозвіл на окремі файли / директорії встановлений на що - щось на зразок chown root :0 private.keyі chmod 600 private.keyтак , що тільки корінь може прочитати його. Як ви говорите, CSR та файли сертифікатів менш чутливі.

З тими дозволами слід згадати шляхи, які ви згадуєте та / usr / local / ssl.


1
Часто програми, що отримують доступ до приватних ключів, запускаються як некористувальні користувачі. Я б запропонував зберегти доступ для групи ssl-cert.
Шейн Медден

1
Зрозуміли, але такі веб-сервери, як Apache, породили кореневий "батьківський" процес і припускаючи, що nginx теж є доречним.
Джонатан Росс

1

Місцеположення правильні:

  • /etc/ssl/certs/для .crtфайлу
  • /etc/ssl/privateдля .keyфайлу

Власник повинен бути root:rootобом (використовувати, sudo chmod root:root <file>якщо потрібно, щоб змінити).

Дозволи :

  • 644для .crtфайлу
  • 600для .keyфайлу

Це буде працювати для nginx.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.