Чтобы немного рассказать об этом, у нас есть проект WebAPI, защищенный проверкой подлинности сертификата клиента.
Один из наших шагов по выпуску сборки - это вызов одного из наших собственных API-интерфейсов с помощью Powershell, но нам нужнодобавьте сертификат для этого вызова.
Мы используем следующую задачу для извлечения управляемого секрета Azure (фактического самозаверяющего сертификата, созданного непосредственно в хранилище ключей).
https://docs.microsoft.com/en-us/vsts/build-release/tasks/deploy/azure-key-vault?view=vsts
Задача успешно возвращает сертификат и помещает его в переменную, но нам не удалось преобразовать эту переменную, которая на приведенной выше странице говорит, что это строковое представление, в фактический экземпляр X509Certificateчто ожидает Invoke-WebRequest.
Ошибка, которую мы получаем в процессе выпуска VSTS, приведена ниже:
2018-05-16T19:33:12.2384270Z ##[error]Cannot bind parameter 'Certificate'. Cannot convert value "***" to type "System.Security.Cryptography.X509Certificates.X509Certificate". Error: "The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters."
2018-05-16T19:33:12.2398107Z ##[debug]Processed: ##vso[task.logissue type=error]Cannot bind parameter 'Certificate'. Cannot convert value "***" to type "System.Security.Cryptography.X509Certificates.X509Certificate". Error: "The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters."
2018-05-16T19:33:12.2399696Z ##[debug]Processed: ##vso[task.complete result=Failed]
2018-05-16T19:33:12.2611215Z ##[section]Finishing: Azure PowerShell script: API Validation
На данный момент, я даже не уверен, какой тип значения является сборкойвозвращаясь с задачи.Это строка, защищенная строка или что?И как преобразовать это в сертификат X509?
Документация Invoke-WebRequest показывает, что ключ -Certificate ожидает тип сертификата X509.
[-Certificate <X509Certificate>]
У меня естьв сети уже был виден некоторый код, показывающий, как преобразовать извлечение сертификата из хранилища ключей, но который извлекает его напрямую с помощью Azure CmdLets и получает возвращаемое значение в байтах, а не строковое представление, как это делает задача VSTS.
$PFXPath = 'mycert.pfx'
$PFXPassword = ''
$PFX = New-Object -TypeName 'System.Security.Cryptography.X509Certificates.X509Certificate2Collection'
$PFX.Import($PFXPath,$PFXPassword,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::PersistKeySet)
$PFX
Сказав все это, кто-нибудь знает, как преобразовать сертификат, полученный с помощью задачи VSTS (которая возвращает строковое представление), в один экземпляр сертификата X509, который я могу передать в Powershell Invoke-Звоните в WebRequest?
Любая помощь очень ценится, спасибо.