Лучшее место для 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, поэтому ни один пользователь, не входящий в группу, не может перейти в каталог, чтобы прочитать файлы.
womble
2
Похоже, ssl-cert - это недопустимое имя группы в Ubuntu. Возможно это должен быть chown root: root вместо этого
Atifm
1
@Atifm Группа сертификатов ssl-cert была введена 16.04 или 18.04. Я не могу вспомнить, какой.
DylanYoung
1
@DylanYoung: он наверняка присутствует в Ubuntu 12.04, и я считаю, что он создается пакетом ssl-cert, который используется, возможно, среди прочего, для создания самозаверяющих сертификатов
snakeoil
35

На самом деле не имеет значения, куда вы их поместите, если вы правильно защищаете свои файлы закрытых ключей . Открытый сертификат является публичным; защита не требуется - привилегии сервера или иное.

Чтобы расширить ответ, я не использую местоположение по умолчанию /etc/ssl.
Мне легче держать все мои в отдельной области из-за резервных копий + другие причины.

Для Apache SSL я сохраняю свою /etc/apache2/ssl/privateили аналогичную «корневую область» в /etc/.

Пример настройки

Этот пост ориентирован на Ubuntu (Debian) + Apache, но должен работать на большинстве систем -
просто примените разрешения и обновите местоположение / путь в данной конфигурации (apache / nginx / etc).
Если файлы ключей 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» тоже хорошо.

Включить модуль Apache SSL

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) в качестве хорошей отправной точки / примера директив / каталогов по умолчанию, которые обычно используются в простом (conf) файле Apache / SSL Apache / SSL. , Обычно он указывает на самоподписанный сертификат SSL + ключ (snakeoil), пакеты CA, а также на общие директивы, используемые для данного сайта SSL.

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

bshea
источник
не уверен, почему вы бы предложили установить 710 для разрешений для / etc / apache2 / ssl / private. Установка бита выполнения для каталога (для группы) без установки бита чтения для каталога (для группы) не имеет большого смысла для меня. Вы хотели установить его на 750?
Крив
@chriv Я просто установил права доступа в зависимости от того, как я вижу настройки в области SSL по умолчанию в Ubuntu. Смотрите / etc / ssl / certs & / etc / ssl / private & 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
Джордж Dimitriadis
Кстати, также возможно просто объединить ваши: 80 и: 443 конфиги в одном файле Apache ".conf". Я перенаправляю все, что попало на порт: 80 в: 443 / SSL в любом случае. Также возможно поместить основные настройки SSL в файл .conf и создать дополнительный «подробный» файл настроек SSL (например, для установки используемых шифров / etc) и просто включить его во все ваши файлы .conf за пределами виртуальных областей. Я использую эти настройки, чтобы немного «укрепить» SSL, и включаю его в каждый виртуальный сайт .conf. Я могу получить A + в SSL Labs таким образом.
bshea
10

Все ответы здесь кажутся нормальными, но я хочу упомянуть одну вещь, которую я нашел, это проблема ... Если вам нужно объединить свой сертификат с промежуточными звеньями или корнями, чтобы придумать файл цепочки, не вставляйте это /etc/ssl/certs, потому что когда c_rehashвыполняется, он может создавать хеш-символьные ссылки на ваши сертификаты из-за корней или промежуточных звеньев внутри них.

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

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

Вскоре после очистки некоторых старых .crt и сцепленных файлов .pem, которые у меня были /etc/ssl/certs.

Хранение хотя бы ваших цепей в другом месте позволяет избежать этой проблемы. Я закончил тем, что /etc/ssl/local_certsдержал свои сертификаты и цепочки, чтобы они не были потеряны в беспорядке сертификатов CA, которые вы найдете в/etc/ssl/certs

barryp
источник
2

На самом деле небезопасного места нет, если разрешение для отдельных файлов / каталогов установлено на что-то подобное, chown root :0 private.keyи chmod 600 private.keyпоэтому только root может его читать. Как вы говорите, CSR и файлы сертификатов менее чувствительны.

С этими разрешениями пути, которые вы упоминаете, и / usr / local / ssl должны быть в порядке.

Джонатан Росс
источник
1
Часто приложения, имеющие доступ к закрытым ключам, работают от имени пользователя, не являющегося пользователем root. Я бы предложил сохранить доступ для группы 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.

Раэль Гугельмин Кунья
источник