Как и большинство вещей в жизни, это все началось с чьего-то послания в Twitter.
Blogged: почему подписание пакета Nuget не (пока) для меня. https://t.co/4RSES2BO4R Близкий взгляд на функцию подписания пакета Nuget, где это полезно, и в каких способах оно падает.
Вы можете кодировать — подписать пакет Nuget? Я не знаю, почему я не знал, что другой, чем я подумал, что понятия не имел, что я должен заботиться или даже дал ему вторую мысль. Но статья Фила и последующее обсуждение в Твиттере заставила меня просто понять, что я должен взглянуть на поток. Ведь больше мудреца мудрости из Фила выгнала меня по краю:
Нет никакого вреда для всех, если вы подпишите свою посылку.
Вы правы Фил, а как вы можете спорить с этим лбом … Итак, давайте сделаем это.
Что такое Nuget? NugeT — это система управления пакетами, которая была в первую очередь разработана для разработчиков .NET и теперь стала механизмом пакета/выпуска на де-факто для этой экосистемы. Какой NPM является разработчиками NODE.JS, NugeT — разработчики .NET .NET. Больше информации на https://www.nuget.org Отказ
У меня есть небольшая библиотека для помощи .NET Разработчики будут более продуктивными с созданием приложений Alexa, Алекса. Нетто Отказ Когда я начал этот проект, я имел обыкновение просто иметь это в моем местном поле и построит вещи, используя Visual Studio и вручную загрузить пакет Nuget. Тогда люди высмеивали меня. И я съел мои скорби в коробках лунного пирога. К счастью, я работаю с кучей талантливых людей и помог мне увидеть свет в DevOps и помог мне установить конвейеров CI/CD, используя Azure DevOps Отказ С тех пор у меня есть мое библиотечное здание, поток одобрения выпуска, автоматизированная упаковка/публикация на серверы Nuget. Я просто просто зарегистрировался код и новая версия выпускается. Идеально. Теперь я просто хочу добавить код подписания в пакет. Естественно, я делаю то, что делает каждый профессиональный разработчик и Google, отправился, чтобы прочитать документы о подписании кода Nuget Packages. К счастью, есть какая-то хорошая документация на Подписание пакетов Nuget Действительно
Первое, что вам нужно, это сертификат подписания кода. Есть много поставщиков этих и разных цен, так что выберите своего предпочтительного провайдера. Я решил использовать DigiCert Для этого, но использовали другие поставщики в прошлом. Процесс получения кодового подписания CERT является немного больше, чем просто средний сертификат SSL, поэтому обязательно следите за шагами. Как только у вас есть наличие, экспортируйте версии DER и PFX, поскольку вам понадобятся оба из них для этого процесса. Ваш провайдер должен предоставить инструкции о том, как это сделать для вас.
Следующим до модификации My Azure DEVOPS трубопровода. Я делаю свою акцию Nuget в выпускном трубопроводе после успешной сборки и шага одобрения фактически завершить развертывание. Мой простой выпускной трубопровод выглядит так:
Подписание обеспечивается Nuget CLI, поэтому мне просто нужно было добавить другую задачу на этот поток справа? Я добавил еще один и собирался просто выбрать команду «Знак» как настроенную опцию. Ну, команда «Знак» не является выборной опцией в задаче. Есть Запрос, чтобы сделать это одним из вариантов по умолчанию для задачи лазурного трубопровода прямо сейчас Но это еще нет там. Таким образом, для этого мы будем использовать опцию «Custom», который позволяет нам пройти в любую команду и args. Документы уже сказали мне команды, которые мне понадобятся: файл сертификата, которому я должен был иметь. Хм, как у меня будет файл сертификата в моем CD-трубопроводе?! Как оказывается, есть Защищенное хранение файлов в лазурных трубопроводах Я могу использовать! Это позволяет мне загрузить файл, который я могу позже ссылаться на конвейере, используя аргумент. Помните, что файл PFX мы экспортировали? В вашем проекте DEVOPS в соответствии с трубопроводами есть опция меню «Библиотека». Идут там, доставка от того, где вы можете загружать файлы, и я загрузил свой файл PFX там:
Следующее, что мне нужно сделать, также предоставляют мой пароль для этого экспортированного файла PFX (вы экспортировали его с паролем правым!). Для этого я использовал Переменные группы В Azure DEVOPS создал группу, называемую сертификатом значения и добавил мою пару имя/значение там, отмечая значение как секрет. В качестве вариабельной группы я могу «ссылаться» эту группу для любого определения сборки/выпуска, не явно имея переменную в этих определениях. Это супер удобно, чтобы поделиться по всему определениям. Вы можете сейчас Ссылка на Azure KeyVault Для секретов (больше, чтобы прийти на это в части 2 блог здесь). У меня есть мой код подписания кода (PFX), и мой сертификат пароль сохраняется надежно. С этими двумя вещами теперь я готов продолжить свое определение.
Теперь, как я получу файл из безопасного хранилища?! Как я читал в документах, есть Скачать безопасный файл Задача, которую я могу добавить в свой трубопровод. Конфигурация спрашивает меня, какой файл использовать, а затем в справочном имени области выходных переменных, я даю ему имя, которое я могу использовать, в данном случае «сертификат»:
Это имя переменной позволяет мне использовать его позже в моих определениях как $ (сертификат.securefilePath), поэтому мне не нужно скриться до угадания, где он скачал на машину агента. Теперь, когда у нас это выяснилось, давайте вернемся к задаче подписания … Помните, что «пользовательский» мы говорили о ранее. В пользовательской задаче я указываю в раздел команды и аргументов полная команда + аргументы, которые мне нужны в соответствии с документами. Мое полное определение выглядит так:
sign $(System.ArtifactsDirectory)\$(Release.PrimaryArtifactSourceAlias)\drop\*.nupkg -CertificatePath $(Certificate.secureFilePath) -CertificatePassword $(CertificatePassword) -Timestamper http://timestamp.digicert.com
Чтобы объяснить немного, я использую некоторые заранее определенные переменные системы. АртефактыДерекция и выпуск. PrivateArtifactsourcealias, чтобы помочь построить путь к тому, где папка сброса находится на машине агента. Другие из безопасных файлов (сертификатов.securefilePath) и переменная группа (сертификат), ранее определенные. Они переводят на реальные значения в сборке (секрет замаскируется в журналах, как показано ниже) и завершить задачу.
Здесь был мой журнал на самом деле на самом деле:
2019-04-04T19:10:44.4785575Z ##[debug]exec tool: C:\hostedtoolcache\windows\NuGet\4.6.4\x64\nuget.exe 2019-04-04T19:10:44.4785807Z ##[debug]arguments: 2019-04-04T19:10:44.4786015Z ##[debug] sign 2019-04-04T19:10:44.4786248Z ##[debug] D:\a\r1\a\_Alexa.NET-master\drop\*.nupkg 2019-04-04T19:10:44.4786476Z ##[debug] -CertificatePath 2019-04-04T19:10:44.4786687Z ##[debug] D:\a\_temp\timheuer-digicert.pfx 2019-04-04T19:10:44.4786916Z ##[debug] -CertificatePassword 2019-04-04T19:10:44.4787190Z ##[debug] *** 2019-04-04T19:10:44.4787449Z ##[debug] -Timestamper 2019-04-04T19:10:44.4787968Z ##[debug] http://timestamp.digicert.com 2019-04-04T19:10:44.4789380Z ##[debug] -NonInteractive 2019-04-04T19:10:44.4789939Z [command]C:\hostedtoolcache\windows\NuGet\4.6.4\x64\nuget.exe sign D:\a\r1\a\_Alexa.NET-master\drop\*.nupkg -CertificatePath D:\a\_temp\timheuer-digicert.pfx -CertificatePassword *** -Timestamper http://timestamp.digicert.com -NonInteractive 2019-04-04T19:10:52.6357013Z 2019-04-04T19:10:52.6357916Z 2019-04-04T19:10:52.6358659Z Signing package(s) with certificate:2019-04-04T19:10:52.6360408Z Valid from: 4/4/2019 12:00:00 AM to 4/7/2020 12:00:00 PM 2019-04-04T19:10:52.6360664Z 2019-04-04T19:10:52.6360936Z Timestamping package(s) with: 2019-04-04T19:10:52.6361268Z http://timestamp.digicert.com 2019-04-04T19:10:52.6361576Z Package(s) signed successfully.
Сделанный! Некоторые простые добавленные задачи и чтение нескольких документов, чтобы получить подписанный пакет Nuget. Теперь повторно читая документы на подписанные пакеты, которые я должен загрузить свой сертификат в свой профиль Nuget, чтобы он был распознан. На этот раз мне нужно только предоставить экспорт DER. После предоставления и мою пакет публикуется, я получаю небольшой значок рядом со списком, показывающим мне, что это подписанный пакет:
Это было хорошее упражнение, помогая мне узнать несколько дополнительных шагов в Azure DEVOPS, работающих с файлами и пользовательскими переменными задач. Сразу же, как я делал это, мой друг Орен Новотный не мог не называть меня за этот подход.
я
Так что оставайтесь настроенными для вторичного подхода, используя Azure KeyVault полностью завершить это без необходимости загрузки файла сертификата.
(Эта статья поперечное из Timheuer.com )
Оригинал: «https://dev.to/timheuer/make-people-trust-your-nuget-packages-more-with-code-signing-4gfm»