Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
В этой статье объясняется, как запустить самостоятельно размещенный агент с самозаверяющим сертификатом для Azure Pipelines и на сервере Azure DevOps.
Работа с сертификатом SSL-сервера
Enter server URL > https://corp.tfs.com/tfs
Enter authentication type (press enter for Integrated) >
Connecting to server ...
An error occurred while sending the request.
В журнале диагностики агента показано:
[2017-11-06 20:55:33Z ERR AgentServer] System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: A security error occurred
Предыдущая ошибка безопасности может указывать на то, что компьютер сборки не доверяет сертификату сервера, используемому на хост-компьютере Azure Devops Server. Убедитесь, что вы установите самоподписанный SSL-сертификат сервера в хранилище сертификатов ОС.
Windows: Windows certificate store
Linux: OpenSSL certificate store
macOS: OpenSSL certificate store for agent version 2.124.0 or below
Keychain for agent version 2.125.0 or above
Вы можете легко проверить правильность установки сертификата, выполнив несколько команд. Если SSL рукопожатие успешно завершается (даже если вы получаете код 401 по запросу), установка была успешной.
Windows: PowerShell Invoke-WebRequest -Uri https://corp.tfs.com/tfs -UseDefaultCredentials
Linux: curl -v https://corp.tfs.com/tfs
macOS: curl -v https://corp.tfs.com/tfs (agent version 2.124.0 or below, curl needs to be built for OpenSSL)
curl -v https://corp.tfs.com/tfs (agent version 2.125.0 or above, curl needs to be built for Secure Transport)
Если вы не можете успешно установить сертификат в хранилище сертификатов компьютера по разным причинам (например, у вас нет правильных разрешений или вы находитесь на настроенном компьютере Linux), есть еще один вариант. Агент версии 2.125.0 или выше имеет возможность игнорировать ошибку проверки сертификата SSL-сервера.
Это важно
Не рекомендуется игнорировать ошибки проверки сертификата SSL-сервера. Это не безопасно. Настоятельно рекомендуется установить сертификат в хранилище сертификатов компьютера.
Передайте --sslskipcertvalidation во время настройки агента:
./config.cmd/sh --sslskipcertvalidation
Примечание.
Чтобы использовать флаг в Linux и macOS, --sslskipcertvalidationlibcurl на компьютере Linux или macOS с помощью OpenSSL.
Проблема: команда получения исходных данных Git завершается сбоем при использовании SSL-сертификата (только для агента Windows)
Мы отправляем командную строку Git в составе агента Windows и используем эту копию Git для всех операций, связанных с Git. Если у вас есть самоподписанный SSL-сертификат для локального сервера Azure DevOps, настройте предустановленный Git так, чтобы он разрешал использование самоподписанного SSL-сертификата.
Существует два способа решения этой проблемы:
Задайте следующие
git configпараметры на глобальном уровне для пользователя, под которым работает агент.git config --global http."https://tfs.com/".sslCAInfo certificate.pemПримечание.
Установка уровня
git configсистемы не является надежной в Windows. Файл.gitconfigсистемы хранится вместе с копией Git, которую мы упаковали. Упакованный Git заменяется каждый раз, когда агент обновляется до новой версии.Включите git для использования
SChannelво время настройки при использовании агента версии 2.129.0 или более поздней версии. Укажите--gituseschannelво время настройки агента../config.cmd --gituseschannelПримечание.
Git
SChannelимеет более строгие требования для самозаверяющего сертификата. Самозаверяющий сертификат, создаваемый службами IIS или командой PowerShell, может быть несовместим сSChannel.
Работа с SSL-сертификатом клиента
IIS имеет параметр SSL, который требует, чтобы все входящие запросы к Azure DevOps Server представляли клиентский сертификат и обычные учетные данные.
Если включен параметр SSL IIS, необходимо использовать версию 2.125.0 или более позднюю и выполнить следующие дополнительные действия, чтобы настроить компьютер сборки на сервере Azure DevOps Server.
Подготовьте все необходимые сведения о сертификате:
- Сертификат центра сертификации (ЦС) в
.pemформате: этот файл должен содержать открытый ключ и подпись сертификата ЦС. Необходимо поместить корневой сертификат ЦС и все промежуточные сертификаты ЦС в один.pemфайл. - Сертификат клиента в
.pemформате: этот файл должен содержать открытый ключ и подпись сертификата клиента. - Закрытый ключ сертификата клиента в
.pemформате: этот файл должен содержать только закрытый ключ сертификата клиента. - Пакет архива сертификата клиента в
.pfxформате: этот файл должен содержать подпись, открытый ключ и закрытый ключ сертификата клиента. - Пароль. Используйте тот же пароль для защиты закрытого ключа сертификата клиента и пакета архива сертификата клиента, так как у них есть закрытый ключ сертификата клиента.
- Сертификат центра сертификации (ЦС) в
Установите сертификат ЦС в хранилище сертификатов компьютера:
- Linux: хранилище сертификатов OpenSSL
- macOS: цепочка ключей системы или пользователя
- Windows: хранилище сертификатов Windows
Передайте
--sslcacert,--sslclientcert,--sslclientcertkey.--sslclientcertarchive, а также--sslclientcertpasswordво время настройки агента..\config.cmd/sh --sslcacert ca.pem --sslclientcert clientcert.pem --sslclientcertkey clientcert-key-pass.pem --sslclientcertarchive clientcert-archive.pfx --sslclientcertpassword "mypassword"Пароль закрытого ключа сертификата клиента безопасно хранится на каждой платформе.
Linux: Encrypted with a symmetric key based on the machine ID macOS: macOS Keychain Windows: Windows Credential Store
Проверка доверия корневого центра сертификации
Агент сборки использует Node.js, который использует собственное хранилище сертификатов, которое является производным от доверенных корневых сертификатов Mozilla. Хранилище центра сертификации Node.js должно доверять любому корневому сертификату, используемому для безопасного взаимодействия. В противном случае после обновления сертификата на компьютере Azure DevOps Server могут возникнуть следующие ошибки:
- "Не удается получить сертификат локального издателя"
- "САМОПОДПИСАННЫЙ_СЕРТИФИКАТ_В_ЦЕПОЧКЕ"
- "Не удается проверить первый сертификат"
Вы можете использовать массив tls.rootCertificates для проверки доверенных корневых ЦС, которые используются для проверки подключений TLS/SSL.
# Sample script to extract Node.js root certificates using Node.js.
node -e '
const tls = require("tls");
console.log(tls.rootCertificates.join("\n"));
' > "$ROOT_CERTS_FILE"
Переменная NODE_EXTRA_CA_CERTS среды, представленная в Node версии 7.3.0, позволяет указать файл, содержащий один или несколько сертификатов ЦС, которым доверяет Node (в дополнение к пакету по умолчанию).
NODE_EXTRA_CA_CERTS добавляется в хранилище сертификатов.
На сервере или ЦС экспортируйте корневые сертификаты (и любые промежуточные, при необходимости) в виде файла с кодировкой PEM. Этот формат представляет собой текстовый файл с данными в формате Base64 и
-----BEGIN CERTIFICATE-----. Убедитесь, что вы используете PEM в кодировке Base64, а не DER. (В Windows файлы .cer можно переименовать в .pem, чтобы избежать путаницы. Файл может иметь любое расширение, но .pem или .crt является стандартным.)Если у вас несколько внутренних ЦС (цепочка), их можно объединить в один файл. Узел считывает все сертификаты в этом файле.
Сделайте PEM доступным в агенте сборки, поместив его в известный путь (например,
C:\certs\CorpRootCA.pem or /etc/ssl/certs/CorpRootCA.pem).Задайте переменную среды ОС,
NODE_EXTRA_CA_CERTSкоторая указывает на PEM-файл. Например, powerShell можно использовать в Windows:
[Environment]::SetEnvironmentVariable("NODE_EXTRA_CA_CERTS", "C:\certs\CorpRootCA.pem", "Machine")
Связанный контент
Дополнительные сведения о поддержке сертификата клиента агента см. в.