2012-04-20 9 views
5

Actualmente estoy trabajando en un proceso de implementación automatizada para un servicio alojado para Windows Azure. La creación de los archivos .cspkg y .cscfg funciona perfectamente utilizando una llamada al msbuild. Ahora estoy escribiendo una pequeña aplicación de consola .NET que debe implementar estos archivos en Azure usando la API REST de administración.No se puede actualizar la implementación de Azure mediante la API REST de administración (emisión de certificado SSL)

No hay ningún problema relacionado con la API en sí. Puedo enviar una solicitud a la API usando uno de mis certificados de gestión. Subo el archivo .cspkg a Azure BLOB Storage y luego intento llamar al Upgrade Deployment. Pero cada vez que lo intento, recibo una respuesta de "400 solicitudes incorrectas" que indica que no se encontró el certificado con la huella digital xy. Este certificado es el certificado SSL (no un certificado de administración) Estoy usando HTTPS para mi dominio personalizado (DNS CNAME).

Y ahora, toda la cosa se pone interesante:

Cuando despliego los archivos usando el comando "Publicar" en mi Visual Studio, no hay ningún problema. (Comparé los archivos .cscfg/.cspkg de VS y de mi salida msbuild: aparte de algunos GUID, son idénticos). Y, además, usando la función de administración de Silverlight en mi navegador, incluso puedo cargar mis archivos generados que no se pudieron subir usando la API.

Cuando recupero una lista de todos los certificados utilizando la llamada List Certificates, el certificado que se dice que falta está aparentemente allí. También puedo recuperar sus datos usando la llamada Get Certificate.

Entonces, ¿por qué Azure sigue diciéndome que el certificado no se encontró al usar la llamada Upgrade Deployment? ¿Alguien experimentó algo similar? Alguien me ha preguntado? Gracias por adelantado.

P.S .: Esto es lo que dice Azure cuando se utiliza la API:

<Error xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Code>BadRequest</Code> 
    <Message>The certitficate with thumbprint 7b232c4a2d6e3deadbeef120d5dbc1fe8049fbea was not found.</Message> 
</Error> 

P.P.S .: Sí, la palabra en la respuesta es certitficate, no certificate.

Respuesta

4

Bien, después de usar la llamada a la API List Subscription Operations para averiguar qué llama Visual Studio para implementar aplicaciones, encontré la solución.

Resulta que la URL que he usado para la solicitud de la API estaba mal, pero : con el debido respeto, me culpo a Microsoft por lousily documentar su Azure Management API.

En su documentación, que escriben la dirección URL a utilizar es:

https://management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deploymentslots/<deployment-slot>/?comp=upgrade

Y la descripción es la siguiente:

para generar la URI de la solicitud, reemplace < suscripción-id > con su ID de suscripción, < service-name > con el nombre de su servicio, < deployment-slot > con montaje o producción, y < deployment-name > con el nombre único de su implementación.

Lo que olvidó mencionar es que usted tiene que utilizar el nombre DNS de su servicio, y no el nombre ! Al menos podrían devolver un mensaje de error apropiado indicándole que el nombre del servicio no es válido, que no existe o que no pertenece a su ID de suscripción, en lugar de quejarse de algún problema relacionado con el certificado.

Gracias Microsoft, eso me costó más de dos días.

+0

Curioso, pero ¿cuál creía que era el nombre de su servicio? La ID privada y el Nombre de implementación son ambos valores Guid. El nombre del servicio alojado es el valor real del DNS (siempre en minúscula). ¿Qué otro nombre hay allí (etiqueta?). Si usa UpgradeDeployment, necesita el Deployment Name (guid); de lo contrario, puede usar * BySlot y apuntar a un determinado espacio. – dunnry

+0

El nombre del servicio no tiene nada que ver con la identificación privada o el nombre de implementación. Estos se refieren a * implementación * y cambian cada vez que crea una nueva implementación. Pero como puede ver en los documentos, la API necesita el nombre del servicio incluso si deseo actualizar una implementación o ranura de implementación que podría identificar utilizando un GUID.También puede inferir eso del patrón de URI que especifiqué en mi respuesta, dado el hecho de que no hay una parte opcional en el URI. Ver mi [captura de pantalla] (http://dl.dropbox.com/u/17554533/azure.png) para verificar qué significan "nombre del servicio" y "nombre DNS". – fero

+0

Estaba preguntando qué nombre estaba tratando de usar y delineando las únicas combinaciones posibles. Supongo que el portal puede ser confuso. Afortunadamente, siempre puedes utilizar la salida API para generar entradas y no tener que adivinar. – dunnry

0

El error indica que no ha cargado ese certificado en la tienda secreta del servicio alojado. Visual Studio podría hacerlo automaticamente, pero si quiere replicarlo programáticamente, use la llamada Add Certificate API y cargue el PFX en la implementación.

+0

El certificado siempre estuvo allí. En mi pregunta, escribí que la llamada 'List Certificates' lo mostraba. Para el problema real, vea mi propia respuesta. – fero

+0

Es interesante ver que puede llamar a la implementación de actualización en un nombre de servicio hospedado falso y obtener este error (de la respuesta a continuación). – dunnry

0

Puede ver '400 BadRequest - No se encontró el certificado con la huella digital XYZ'. aparecer en el escenario o CreateDeployment UpgradeDeployment por la siguiente razón (que acabo depurado):

  1. utiliza el mismo certificado para la gestión de suscripción como lo hace para, por ejemplo, Cifrado de contraseñas SSL o de escritorio remoto en su servicio alojado. Por lo tanto, utilizará el certificado con la huella digital XYZ para autenticar su llamada REST de gestión de servicios que crea la implementación.
  2. Al especificar los parámetros de despliegue se pasa en su CSCFG que hace referencia a ese mismo certificado por su huella digital, ya que tiene que configurar ese certificado aún no se agrega a su de escritorio remoto/SSL, etc.
  3. servicio alojado CERT.

En este caso el 400 Bad Request error realmente es que le dice que usted tiene una solicitud incorrecta, porque el certificado en su CSCFG aún no está conectado a su servicio alojado. La confusión surge (para mí) porque, como es un certificado de propósito múltiple, malinterpreta el mensaje de error como refiriéndose a la autenticación de la solicitud, aunque no obtenga 401.

Cuestiones relacionadas