Использование сертификата управления с Azure REST API

Я использую в своем приложении REST API управления службами Azure. Я загрузил сертификат управления на лазурный, и у меня есть копия на локальном компьютере. Я храню сертификат в отдельной папке (AzureCertificate) в самом приложении и ссылаюсь на это место. например:

строка certificatePath = Server.MapPath (~ / AzureCertificate /) + certificateName;

X509Certificate2 certificate = новый X509Certificate2 (certificatePath);

AzureCertificate - Имя папки certificateName - MyCertificatieName.cer

он отлично работает, когда я запускаю приложение в своей локальной среде разработки. Но я получаю ошибку ниже, когда развертываю то же самое на веб-сайте Azure.

Удаленный сервер вернул ошибку: (403) Запрещено

Вот как я делаю запрос

строка uri = apiURL + subscriptionId + / services / hostedservices;

HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create (uri);

X509Certificate2 certificate = новый X509Certificate2 (certificatePath);

req.ClientCertificates.Add (сертификат);

req.Headers.Add (x-ms-version, 01.10.2009); HttpWebResponse res =

(HttpWebResponse) req.GetResponse ();

Но это вызывает вышеупомянутое исключение в последней строке (req.GetResponse ()).

Можем ли мы использовать сертификат управления таким образом ?.

Мое требование - разработать приложение, использующее Azure REST API, и развернуть его в Azure.


person Nagaraj .    schedule 30.09.2014    source источник
comment
к какому apiurl вы пытаетесь получить доступ?   -  person Peter Ritchie    schedule 30.09.2014


Ответы (2)


Я также обнаружил, что создание сертификата, точно подходящего для использования с Management API, очень важно - я получал 403 ошибки, пока не использовал этот скрипт для создания сертификата:

makecert -r -pe -a sha1 -n "CN=Windows Azure Authentication Certificate" -ss my -len 2048 -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 ManagementApiCert.cer

Я понял это здесь: http://blogs.msdn.com/b/davidhardin/archive/2013/08/27/azure-management-certificate-public-key-private-key.aspx, который представляет собой пару лет, но работал у меня, когда другие, более новые, которые я пробовал, не работали.

Кроме того, убедитесь, что вы загрузили сертификат в разделе «Сертификаты управления» в настройках портала, это не SSL или сертификат удаленного доступа.

person SeanN    schedule 01.01.2016
comment
Ты спас мне день. Спасибо - person jekcom; 02.02.2016

Я бы предложил использовать пакет SDK для управления Azure. Вы можете установить это из пакета nuget с именем Microsoft.WindowsAzure.Management и использовать соответствующий класс / метод, чтобы делать то, что вы хотите.

Если вам действительно нужно что-то сделать напрямую через HTTP и REST API, я бы предложил использовать HttpClient вместо HttpWebRequest. (HttpClient - это еще один пакет nuget с именем Microsoft.Net.Http. Затем вы можете использовать SubscriptionCloudCredntials (через свойство ManagementClient.Credentials) для заполнения HTTP-запроса за вас. Например:

var client = new ManagementClient(
    new CertificateCloudCredentials(subscriptionId, certificate));
//...
var requestMessage = new HttpRequestMessage(HttpMethod.Get, apiURL);
await client.Credentials.ProcessHttpRequestAsync(requestMessage,
    CancellationToken.None);
var httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.SendAsync(requestMessage);
// TODO: process response, maybe:
var responseText = response.AsString();

Я бы порекомендовал использовать client, когда вы можете.

person Peter Ritchie    schedule 30.09.2014
comment
Но, может, сертификат все равно нужен ??? Я использую (management.core.windows.net/‹ подписка- id ›/ services /) - person Nagaraj .; 02.10.2014
comment
Да, это параметр сертификата - person Peter Ritchie; 02.10.2014