Настройка SSL#

Использование защищенного соединения с помощью протокола Secure Socket Layer (SSL) в Artifactory является важной рекомендуемой практикой для обеспечения безопасности. SSL обеспечивает безопасность связи как при входящих, так и исходящих соединениях.

Исходящие SSL-взаимодействия:

  • Подключение к удаленным прокси-репозиториям через HTTPS;

  • Серверы с защитой SSL/TLS (SMTP-сервер).

Входящие SSL-взаимодействия:

  • Доступ к пользовательскому интерфейсу через веб-браузер по протоколу HTTPS;

  • Инструменты для доступа к содержимому репозитория;

  • Использование REST API.

Исходящий SSL - доверенные SSL-сертификаты удаленных репозиториев#

Если SSL-сертификат удаленного прокси-репозитория не является доверенным, репозиторий может быть автоматически заблокирован. В таком случае исходящие запросы будут завершаться ошибкой с сообщением PKIX path building failed.

Чтобы решить данную проблему, в конфигурации прокси-репозитория предусмотрен раздел Use the Nexus Repository truststore. Данный раздел позволяет управлять SSL-сертификатами удаленных репозиториев. Он доступен только в случае, если удаленное хранилище использует HTTPS.

Кнопка View certificate открывает диалоговое окно с подробной информацией о сертификате.

create-ssl

Когда сертификат не выдан доверенным центром сертификации и отсутствуете в стандартном хранилище Java, необходимо вручную подтвердить его доверие.

Чтобы подтвердить доверие сертификату:

  1. Откройте окно Certificate Details, нажав на кнопку View certificate;

  2. Нажмите на кнопку Add certificate to tuststore.

Данное действие аналогично использованию кнопки Add Certificate в разделе меню Администрирование -> Securiry -> SSL Certificates.

Чекбокс Use certificates stored in Nexus to connect to external systems указывает, что Artifactory будет проверять доверие не только через хранилище JVM, но и через внутреннее хранилище. Без добавления сертификата в частное хранилище и активации опции прокси репозиторий останется недоверенным.

Доверенные сертификаты из внутреннего хранилища и хранилища JVM объединены. Хранилище доверенных сертификатов Java по умолчанию содержит публичные сертификаты доверенных центров сертификации. Если сертификат подписан доверенным центром сертификации, то добавление в доверенное хранилище не требуется.

Исходящий SSL - глобальное доверенные SSL-сертификаты#

Менеджер репозиториев позволяет управлять доверием ко всем удаленным SSL-сертификатам через пользовательский интерфейс.

Для доступа к разделу управления SSL-сертификатами перейдите в раздел Администрирование -> Securiry -> SSL Certificates. Чтобы зайти в данный раздел пользователю необходимы права nx-all или nx-ssl-truststore.

Список сертификатов содержит доверенные сертификаты. Нажатие на строку сертификата предоставит подробную информацию о нем: информация о владельце, издателе и другие. Для удаления сертификата из хранилища нажмите кнопку Delete Certificate .

Кнопка Add Certificate, расположенная над списком, позволяет добавить новый сертификат из сервера или PEM файла.

При загрузке из сервера активируйте чекбокс Load from server и укажите полный URL удаленного сайта. Если сервер не доступен по URL, укажите только имя хоста или IP-адрес с портом через двоеточие (example.com:8443), в этом случае будет установлено прямое SSL-соединение.

В качестве альтернативы можно выбрать опцию Paste PEM, чтобы настроить доверие к удаленному сертификату вручную.

PEM(Privacy Enhanced Mail) - это формат файлов инфраструктуры открытых ключей, используемый для хранения ключей и сертификатов. Файлы PEM представляют собой Base64-кодированные сертификаты X.509 в формате DER.

Скопируйте и вставьте сертификат X.509 DER в текстовое поле так, чтобы он был обрамлен строками:

-----BEGIN CERTIFICATE-----
[Текст сертификата] 
-----END CERTIFICATE-----

Обычно файл сертификата можно получить у его владельца. Для создания такого файла из командной строки используется команда keytool:

keytool -printcert -rfc -sslserver repo1.maven.org > repo1.pem

В результате создается файл repo1.pem текст закодированного сертификата, который можно вставить в соответствующее поле интерфейса.

Если менеджер репозитория успешно прочитает сертификат, отобразится подробная информация о нем. Обязательно проверьте всю информацию о сертификате, прежде чем добавлять его в хранилище доверенных сертификатов.

Исходящий SSL - доверенные SSL-сертификаты с помощью Keytool#

Управление доверенными SSL-сертификатами через командную строку с помощью Keytool является более сложной альтернативой управления сертификатами через пользовательский интерфейс.

Перед тем как приступить к управлению сертификатами из командной строки, потребуется:

  • Базовое понимание технологии SSL-сертификатов и работы с Java VM;

  • Доступ к командной строке операционной системы и программе Keytool;

  • Сетевой доступ к удаленному SSL-серверу, которому требуется настроить доверие, включая настройки HTTP-прокси при необходимости.

Если подключаетесь к серверам, сертификаты которых не подписаны публичным центром сертификации, необходимо выполнить следующие шаги:

  1. Скопируйте файл по умолчанию $JAVA_HOME/jre/lib/security/cacerts в $data-dir/custom-truststore.jks для редактирования. Убедитесь, что у пользователя есть права на чтение этого файла;

  2. Добавьте нужные сертификаты в скопированное хранилище с помощью keytool;

  3. Настройте системные свойства JSSE так, чтобы использовалось новое хранилище вместо стандартного. В файл $install-dir/bin/nexus.vmoptions необходимо добавить параметры.

    -Djavax.net.ssl.trustStore=<absolute_path_to_custom_truststore_file>
    -Djavax.net.ssl.trustStorePassword=<truststore_password>
    

После добавления параметров перезапустите Artifactory и проверьте подключение к удаленному репозиторию с использованием нового сертификата. Сертификаты из нового хранилища будут зарегистрированы как доверенные.

Настройка HTTPS для доступа к пользовательскому интерфейсу и содержимому#

Существует два варианта настройки HTTPS:

  1. Использовать отдельный обратный прокси-сервер перед репозиторием для управления HTTPS. Обратный прокси принимает HTTPS-запросы и перенаправляет их на экземпляр Artifactory через HTTP;

  2. Настроить экземпляр Artifactory для работы через HTTPS напрямую.

Использование обратного прокси-сервера#

Наиболее популярным способом защиты доступа к менеджеру репозиториев является использование выделенного сервера, который обрабатывает HTTPS-запросы вместо Artifactory. Такие сервисы называются обратными прокси или SSL/TLS терминаторами. После получения HTTPS-запрос перенаправляется на менеджер репозиториев по протоколу HTTP, а затем ответ от менеджера возвращается клиенту уже через HTTPS.

Прямое обслуживание SSL#

Альтернативный способ - настройка HTTPS-соединений непосредственно через сервер Eclipse Jetty, встроенный в менеджер репозиториев.

Активация HTTPS-коннектора#

  1. Создайте файл Java keystore $data-dir/etc/ssl/keystore.jks, содержащий SSL-сертификат для Jetty.

  2. Отредактируйте $data-dir/etc/nexus.properties и сохраните файл после внесения следующих изменений.

    • Добавьте новую строку, содержащую:

    application-port-ssl=8443
    

    Измените 8443 на нужный порт, на котором будет работать HTTPS-коннектор. Убедитесь, что порт не используется другими процессами.

    • Найдите строку, содержащую nexus-args, удалите ведущий # и пробел. Измените значение свойства nexus-args, разделенного запятыми, на включающее ${jetty.etc}/jetty-https.xml, чтобы получилось следующее

    nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml
    
    • Добавьте новую строку, содержащую:

    `ssl.etc=${karaf.data}/etc/ssl`
    
  3. Откройте файл $install-dir/etc/jetty/jetty-https.xml

    • (Обязательно) Установите одинаковые пароли для всех ключей в хранилище.

    • (Рекомендуется) Перед строкой, содержащей <Set name=«KeyStorePath»>, добавьте новую строку с псевдонимом:

    <Set name=«certAlias»>jetty</Set>
    
  4. Перезапустите менеджер репозиториев. Убедитесь, что соединение по HTTPS установлено.

  5. Обновите базовый URL для использования HTTPS в конфигурации менеджера репозитория с помощью возможности Base URL.

Как отключить HTTP-коннектор#

  1. Откройте файл конфигурации $data-dir/etc/nexus.properties. Измените параметр nexus-args, удалив из него jetty-http.xml;

  2. Сохраните файл;

  3. Перезапустите Artifactory. Убедитесь, что обычные HTTP-запросы больше не обслуживаются.