Вопрос или проблема
Я пытаюсь создать приложение .NET Core 8 с опцией DOTNET_NUGET_SIGNATURE_VERIFICATION, установленной в true. Я строю его в OpenShift S2I и использую приватный репозиторий NuGet (Artifactory).
Если DOTNET_NUGET_SIGNATURE_VERIFICATION=true, сборка занимает около 3,5 часов.
Если DOTNET_NUGET_SIGNATURE_VERIFICATION=false, сборка занимает около 3 минут.
Я нашел статью https://devblogs.microsoft.com/nuget/the-nuget-org-repository-signing-certificate-will-be-updated-as-soon-as-april-8th-2024/, в которой говорится, что мне нужно настроить отпечаток для доверенного подписанта, что я и сделал, но это не помогло. В журналах сборки я вижу предупреждения NU3018 и ошибки NU3034.
NU3018 Функция отзыва не смогла проверить отзыв, потому что сервер отзыва не смог быть достигнут. RevocationStatusUnknown: невозможно получить CRL сертификата
NU3034 Этот пакет подписан, но не доверенным подписантом.
Предупреждение приводит меня к https://learn.microsoft.com/en-us/dotnet/core/tools/nuget-signed-package-verification, где упоминается, что пакет сертификатов ищется по адресу
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
Я полагаю, мне нужно добавить его туда, но где я могу его получить?
Я не разработчик. Я пытаюсь настроить OpenShift для наших разработчиков.
Что мне делать с NU3034? Нужны ли мне какие-то значения nuget.config от разработчиков?
Спасибо.
Ответ или решение
Проверка подлинности пакетов NuGet во время сборки: Подробное руководство
При сборке приложения на .NET Core 8 с включенной опцией DOTNET_NUGET_SIGNATURE_VERIFICATION=true
вы столкнулись с двумя основными проблемами: чрезмерное время сборки и ошибки, связанные с доверенными подписчиками. Рассмотрим, что вы можете сделать для решения этих проблем и оптимизации процесса.
Проблема скорости сборки
Вы отметили, что время сборки при включенной проверке подписи пакетов составляет около 3,5 часов, в то время как при отключенной проверке оно сокращается до 3 минут. Это значительное разногласие указывает на возможные проблемы с конфигурацией сертификатов.
Ошибки и предупреждения
В логе сборки увидели следующие предупреждения и ошибки:
- NU3018: "Функция отзыва не смогла проверить отзыв, так как сервер отзыва не был доступен. RevocationStatusUnknown: невозможно получить CRL сертификата."
- NU3034: "Этот пакет подписан, но не доверенным подписчиком."
Эти коды ошибок говорят о том, что ваша система не может проверить сертификаты пакетов, поскольку она не находит либо их, либо необходимую информацию для проверки.
Решение проблемы с NU3034
-
Добавление шифровальных сертификатов:
-
Проверьте, правильно ли вы добавили отпечаток сертификата в список доверенных подписчиков. Вам необходимо настроить
nuget.config
, добавив секцию для подписчиков:<configuration> <config> <add key="repositorySignatureVerification" value="true" /> </config> <trustedSigners> <signer> <certificate fingerprint="ваш_отпечаток_сертификата" /> </signer> </trustedSigners> </configuration>
-
Убедитесь, что отпечаток совпадает с тем, что используется для подписания пакетов в вашем частном репозитории.
-
-
Правильная локализация сертификатов:
- Как упоминалось в вашем вопросе, сертификаты поиска проводятся в следующем пути:
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
- Убедитесь, что у вас есть необходимый сертификат в этом каталоге. Если его там нет, вы можете его получить у разработчиков или установить самостоятельно.
- Как упоминалось в вашем вопросе, сертификаты поиска проводятся в следующем пути:
Проверка и настройка CRL
Ошибка NU3018 указывает на проблемы с доступом к службе проверки отзыва сертификатов (CRL). Для решения этой проблемы:
-
Проверьте доступность CRL:
- Убедитесь, что сервер, на котором выполняется ваше приложение (OpenShift), имеет доступ к интернету или к локальной службе проверки отзыва сертификатов. Проверьте настройки брандмауэра и конфигурации сети.
-
Отладка сети:
- Если доступ к CRL невозможен, вы можете временно отключить проверку отзыва с помощью параметра
DOTNET_NO_CERTIFICATE_REVOCATION_CHECK
(хотя это не рекомендуется в производственных средах). Это решение позволит временно устранить ошибку, но вам следует найти коренную причину проблемы.
- Если доступ к CRL невозможен, вы можете временно отключить проверку отзыва с помощью параметра
Рекомендации по дальнейшим действиям
Теперь, когда вы знаете, как устранить основную проблему и ошибки, рассмотрите следующие шаги:
- Консультация с разработчиками: Свяжитесь с вашими разработчиками для получения правильного отпечатка сертификата и уточнения деталей настройки
nuget.config
. - Тестирование конфигурации: После внесения изменений в конфигурацию протестируйте сборку, чтобы убедиться, что время сборки значительно сократилось и ошибки больше не появляются.
- Мониторинг системы: Введите регулярный мониторинг системы для выявления любых будущих проблем с сертификатами и безопасностью.
Заключение
Процесс верификации подписи NuGet может значительно замедлить сборку, если не правильно настроены сертификаты или доступ к CRL. С помощью описанных выше шагов вы сможете значительно оптимизировать сборку .NET Core приложения на OpenShift и устранить возникающие ошибки. Важно поддерживать контакт с разработчиками для получения актуальных данных о сертификатах и их статусе, что позволит избежать подобных проблем в будущем.