Created attachment 15630 [details] Вывод $ dotnet add package Newtonsoft.Json Шаги ==== 1. # apt-get install -y dotnet-8.0 2. $ dotnet new web -o webapp 3. $ cd webapp 4. $ dotnet add package Newtonsoft.Json Фактический результат ===================== Ошибки вида (полный лог см. во вложении): > info : X.509 certificate chain validation will use the system certificate bundle at '/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem'. > info : X.509 certificate chain validation will use the fallback certificate bundle at '/usr/lib64/dotnet/sdk/8.0.102/trustedroots/timestampctl.pem'. > [...] > warn : NU3042: Package 'Newtonsoft.Json 13.0.3' from source 'https://api.nuget.org/v3/index.json': The following X.509 root certificate is untrusted because it is not present in the certificate bundle at /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem. For more information, see documentation for NU3042. > [...] > warn : Subject: CN=DigiCert CS RSA4096 Root G5, O="DigiCert, Inc.", C=US > warn : Fingerprint (SHA-256): 7353B6D6C2D6DA4247773F3F07D075DECB5134212BEAD0928EF1F46115260941 > [...] В /usr/lib64/dotnet/sdk/8.0.102/trustedroots/timestampctl.pem (как и в аналогичном файле для 7.0) искомые сертификаты есть. Возможно, проблема в том, что этот fallback не работает с .NET 8? В системном хранилище доверия этих сертификатов нет (# trust-list). Странно, что в конце вывода другая ошибка: > error: Value cannot be null. (Parameter 'path1') (последующий вывод справки об использовании - известная ошибка https://github.com/NuGet/Home/issues/13251) Тем не менее, если установить переменную среды DOTNET_NUGET_SIGNATURE_VERIFICATION=false, то установка работает, что указывает на проблему именно с сертификатами. Ожидаемый результат =================== Успешное добавление пакета, как с .NET 6 и 7. Дополнительно ============= Сертификаты: - https://crt.sh/?q=7353B6D6C2D6DA4247773F3F07D075DECB5134212BEAD0928EF1F46115260941 - https://crt.sh/?q=3E9099B5015E8F486C00BCEA9D111EE721FABA355A89BCF1DF69561E3DC6325C Возможно, связанная ошибка: - https://github.com/NuGet/Home/issues/12033 Информация об ошибках NuGet: - https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3042 - https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3018 Воспроизводимость ================= Воспроизводится на виртуальной машине: [sisyphus] ALT Server 10.1 x86_64 dotnet-8.0-8.0.2-alt1.x86_64 В p10 .NET 8 ещё нет.
Проблема воспроизводится при наличии файла /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem откуда он у вас в системе?
(Ответ для Vitaly Lipatov на комментарий #1) > Проблема воспроизводится при наличии файла > /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem > откуда он у вас в системе? > # rpm -qf /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem > ca-trust-0.1.4-alt1.noarch Пакет присутствует во всех дистрибутивах p10 https://packages.altlinux.org/ru/p10/srpms/ca-trust/images/?task_repo=p10.
(Ответ для Artem Varaksa на комментарий #2) > > ca-trust-0.1.4-alt1.noarch В sisyphus 0.1.5-alt1.
Насколько я понял логику поиска, при существовании файла /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem уже не будет принят в расчёт /usr/lib64/dotnet/sdk/8.0.102/trustedroots/timestampctl.pem Ещё более странно то, что не упоминается файл /usr/lib64/dotnet/sdk/8.0.102/trustedroots/codesignctl.pem который по логике и должен использоваться для проверки подписи. Так вот, при отсутствии файла /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem Надпись такая: info : X.509 certificate chain validation will use the fallback certificate bundle at '/usr/lib64/dotnet/sdk/8.0.102/trustedroots/codesignctl.pem'. info : X.509 certificate chain validation will use the fallback certificate bundle at '/usr/lib64/dotnet/sdk/8.0.102/trustedroots/timestampctl.pem'. то есть system certificate bundle уже нет, зато не потерялся codesignctl.pem В общем, код такой в NuGet.Client/src/NuGet.Core/NuGet.Packaging/Signing/TrustStore/X509TrustStore.cs public static void InitializeForDotNetSdk(ILogger logger) { _ = GetX509ChainFactory(X509StorePurpose.CodeSigning, logger, CreateX509ChainFactoryForDotNetSdk); _ = GetX509ChainFactory(X509StorePurpose.Timestamping, logger, CreateX509ChainFactoryForDotNetSdk); } А каждый CreateX509ChainFactoryForDotNetSdk возвращает успех, если найдено системное хранилище и использует только его!
(Ответ для Artem Varaksa на комментарий #0) ... > > info : X.509 certificate chain validation will use the system certificate bundle at '/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem'. .. > В системном хранилище доверия этих сертификатов нет (# trust-list). ... > https://crt.sh/ > ?q=7353B6D6C2D6DA4247773F3F07D075DECB5134212BEAD0928EF1F46115260941 > - > https://crt.sh/ > ?q=3E9099B5015E8F486C00BCEA9D111EE721FABA355A89BCF1DF69561E3DC6325C > Если у вас в системе есть файл /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem, то заполните его нужными сертификатами, чтобы nuget мог проверять подписи, или удалите этот пустой файл, если он не используется.
«…в следующем расположении: /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem Если найден допустимый пакет сертификатов, NuGet предпочтет его пакету сертификатов пакета SDK для .NET для подписывания кода.» https://learn.microsoft.com/ru-ru/dotnet/core/tools/nuget-signed-package-verification Можно подключиться к Программе доверенных корневых сертификатов Майкрософт https://learn.microsoft.com/ru-ru/security/trusted-root/program-requirements
Добавил пакет с нужными сертификатами ca-certificates-nuget.org.git=0.1-alt1 и зависимость на него в dotnet-sdk-8.0.git=8.0.102-alt2
В июле был выпущен новый сертификат и ошибка вновь появилась. Нужно теперь добавить новый сертификат в указанный пакет
У меня проблема решилась добавлением сертификата DigiCert Trusted Root G4 в файл /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
ca-certificates-nuget.org-0.2-alt1 -> sisyphus: Mon Dec 09 2024 Vitaly Lipatov <lav@altlinux.ru> 0.2-alt1 - add DigiCertTrustedRootG4 (ALT bug 49566)