virginia valores servidores services nube instancias gratis east aws amazon-ec2 amazon-web-services servicebus azureservicebus

amazon-ec2 - valores - us east virginia aws



Conexión al Bus de servicio de Windows Server en AWS (4)

Sí, tu corazonada es correcta. Se encuentra con ese problema porque el certificado utilizado por el servidor se emite para el FQDN de la máquina, y el uso de la IP provocará que el nombre del certificado no coincida.

A corto plazo, puede solucionar esto utilizando una devolución de llamada de CertificateValidation para ignorar el error: http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx

A largo plazo, es posible que desee verificar cómo obtener el nombre externo de la máquina virtual y usar un certificado que coincida con eso.

Estoy empezando a trabajar en un nuevo proyecto utilizando el nuevo Windows Server Service Bus 1.0 Beta. Estoy intentando configurar un entorno de prueba en una máquina virtual AWS EC2.

Instalé el Bus de servicio en una instancia de Windows Server 2008 R2 que se ejecuta en AWS EC2 y configuré una nueva Granja, Contenedor y Host de acuerdo con los ejemplos en el documentatoin de MSDN. Tengo todos los puertos adecuados abiertos en el servidor (4443 y 9354). También seguí las instrucciones de [esta página] [1] para exportar el certificado autogenerado a mi máquina cliente.

Tengo un programa C # muy simple que crea una cola, pone en cola un mensaje y lo recibe. Este programa funciona bien cuando copio el ejecutable en la VM y lo ejecuto allí, así que creo que estoy usando la API correctamente. Sin embargo, recibo excepciones de seguridad cuando ejecuto el programa desde mi casilla de desarrollo local apuntando al servidor de AWS.

Mi código se ve así:

var servername = "X.X.X.X"; // <-- An IP Address, not FQDN var sbNamespace = "MyNamespace"; var httpPort = 4446; var tcpPort = 9354; //create SB uris var rootAddressManagement = ServiceBusEnvironment.CreatePathBasedServiceUri("sb", sbNamespace, string.Format("{0}:{1}", servername, httpPort)); var rootAddressRuntime = ServiceBusEnvironment.CreatePathBasedServiceUri("sb", sbNamespace, string.Format("{0}:{1}", servername, tcpPort)); var tokenProvider = TokenProvider.CreateWindowsTokenProvider(new List<Uri>() { rootAddressManagement }); var namespaceManager = new NamespaceManager(rootAddressManagement, new NamespaceManagerSettings() { TokenProvider = tokenProvider }); var factory = MessagingFactory.Create(rootAddressRuntime, new MessagingFactorySettings() { TokenProvider = tokenProvider, //OperationTimeout = TimeSpan.FromMinutes(30) }); if (!namespaceManager.QueueExists("OrderQueue")) <-- EXCEPTION OCCURRS HERE { // Code to create a queue that is never reached. }

Mi rastro de excepción se ve así:

[Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations+GetAsyncResult`1[[Microsoft.ServiceBus.Messaging.QueueDescription, Microsoft.ServiceBus, Version=1.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]] IteratorAsyncResult failed to move to the next step due to an exception; System.UnauthorizedAccessException: The token provider was unable to provide a security token while accessing ''https://107.23.15.5:4446/APIHealthcare/$STS/Windows/''. Token provider returned message: ''The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.''. ---> System.IdentityModel.Tokens.SecurityTokenException: The token provider was unable to provide a security token while accessing ''https://107.23.15.5:4446/APIHealthcare/$STS/Windows/''. Token provider returned message: ''The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.''. ---> System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size) at System.Net.ConnectStream.WriteHeaders(Boolean async) --- End of inner exception stack trace --- at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) at System.Net.HttpWebRequest.GetRequestStream() at Microsoft.ServiceBus.TokenProviderHelper.GetWindowsAccessTokenCore(IEnumerator`1 stsUris, Func`2 uriBuilder, String requestToken, TimeSpan timeout, DateTime& expiresIn) --- End of inner exception stack trace --- at Microsoft.ServiceBus.TokenProviderHelper.ThrowException(Uri requestUri, WebException exception) at Microsoft.ServiceBus.TokenProviderHelper.GetWindowsAccessTokenCore(IEnumerator`1 stsUris, Func`2 uriBuilder, String requestToken, TimeSpan timeout, DateTime& expiresIn) at Microsoft.ServiceBus.WindowsTokenProvider.OnBeginGetWebToken(String appliesTo, String action, TimeSpan timeout, AsyncCallback callback, Object state) at Microsoft.ServiceBus.TokenProvider.GetWebTokenAsyncResult..ctor(TokenProvider tokenProvider, String appliesTo, String action, Boolean bypassCache, TimeSpan timeout, AsyncCallback callback, Object state) at Microsoft.ServiceBus.TokenProvider.BeginGetWebToken(String appliesTo, String action, Boolean bypassCache, TimeSpan timeout, AsyncCallback callback, Object state) at Microsoft.ServiceBus.TokenProviderUtility.GetMessagingWebToken(ITokenProvider tokenProvider, String appliesTo, String action, Boolean bypassCache, TimeSpan timeout) --- End of inner exception stack trace --- at Microsoft.ServiceBus.TokenProviderUtility.GetMessagingWebToken(ITokenProvider tokenProvider, String appliesTo, String action, Boolean bypassCache, TimeSpan timeout) at Microsoft.ServiceBus.Messaging.HttpWebRequestExtensions.AddAuthorizationHeader(HttpWebRequest request, ITokenProvider tokenProvider, Uri baseAddress, String action) at Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations.GetAsyncResult`1.<GetAsyncSteps>d__c.MoveNext() at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.MoveNextStep() A first chance exception of type ''System.UnauthorizedAccessException'' occurred in Microsoft.ServiceBus.dll System.UnauthorizedAccessException: The token provider was unable to provide a security token while accessing ''https://107.23.15.5:4446/APIHealthcare/$STS/Windows/''. Token provider returned message: ''The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.''. ---> System.IdentityModel.Tokens.SecurityTokenException: The token provider was unable to provide a security token while accessing ''https://107.23.15.5:4446/APIHealthcare/$STS/Windows/''. Token provider returned message: ''The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.''. ---> System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure. at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size) at System.Net.ConnectStream.WriteHeaders(Boolean async) --- End of inner exception stack trace --- at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) at System.Net.HttpWebRequest.GetRequestStream() at Microsoft.ServiceBus.TokenProviderHelper.GetWindowsAccessTokenCore(IEnumerator`1 stsUris, Func`2 uriBuilder, String requestToken, TimeSpan timeout, DateTime& expiresIn) --- End of inner exception stack trace --- at Microsoft.ServiceBus.TokenProviderHelper.ThrowException(Uri requestUri, WebException exception) at Microsoft.ServiceBus.TokenProviderHelper.GetWindowsAccessTokenCore(IEnumerator`1 stsUris, Func`2 uriBuilder, String requestToken, TimeSpan timeout, DateTime& expiresIn) at Microsoft.ServiceBus.WindowsTokenProvider.OnBeginGetWebToken(String appliesTo, String action, TimeSpan timeout, AsyncCallback callback, Object state) at Microsoft.ServiceBus.TokenProvider.GetWebTokenAsyncResult..ctor(TokenProvider tokenProvider, String appliesTo, String action, Boolean bypassCache, TimeSpan timeout, AsyncCallback callback, Object state) at Microsoft.ServiceBus.TokenProvider.BeginGetWebToken(String appliesTo, String action, Boolean bypassCache, TimeSpan timeout, AsyncCallback callback, Object state) at Microsoft.ServiceBus.TokenProviderUtility.GetMessagingWebToken(ITokenProvider tokenProvider, String appliesTo, String action, Boolean bypassCache, TimeSpan timeout) --- End of inner exception stack trace --- Server stack trace: at Microsoft.ServiceBus.TokenProviderUtility.GetMessagingWebToken(ITokenProvider tokenProvider, String appliesTo, String action, Boolean bypassCache, TimeSpan timeout) at Microsoft.ServiceBus.Messaging.HttpWebRequestExtensions.AddAuthorizationHeader(HttpWebRequest request, ITokenProvider tokenProvider, Uri baseAddress, String action) at Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations.GetAsyncResult`1.<GetAsyncSteps>d__c.MoveNext() at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.MoveNextStep() at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.EnumerateSteps(CurrentThreadType state) at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.Start() Exception rethrown at [0]: at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result) at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.End(IAsyncResult asyncResult) at Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations.EndGet[TEntityDescription](IAsyncResult asyncResult) at Microsoft.ServiceBus.NamespaceManager.OnEndQueueExists(IAsyncResult result) at Microsoft.ServiceBus.NamespaceManager.EndQueueExists(IAsyncResult result) at Microsoft.ServiceBus.NamespaceManager.QueueExists(String path) at ServiceBusSandbox.ServiceBusSampleApp.CreateAQueue(NamespaceManager namespaceManager) in c:/Users/cent049/Documents/Visual Studio 2012/Projects/ServiceBusSandbox/ServiceBusSandbox/ServiceBusSampleApp.cs:line 15 at ServiceBusSandbox.ServiceBusSampleApp.Main(String[] args) in c:/Users/cent049/DocumentThe thread ''vshost.RunParkingWindow'' (0x2608) has exited with code 0 (0x0).

Tengo la corazonada de que el problema es que me estoy conectando usando la dirección IP de la máquina virtual y no un FQDN, sin embargo, no sé cómo confirmarlo, ni sé cómo obtener un nombre de dominio para mi servidor AWS. El servidor tiene un nombre de máquina, pero simplemente está en el grupo de trabajo "WORKGROUP", no en un dominio.

Cualquier y toda ayuda sería muy apreciada.


Use el CreateOAuthTokenProvider en lugar del CreateWindowsTokenProvider.

  1. Primero, debe crear una cuenta en la máquina en: rootAddressManagement.
  2. Agregue la cuenta recién creada como un usuario Administrar de su espacio de nombres. Set-SBNamespace -Name "YourNamespace" -Administración de su usuario
  3. Dado que está utilizando una dirección IP, agregue el código de validación de certificado antes de hacer cualquier llamada a SB. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback ((s, cert, chain, ssl) => {return true;});
  4. En tercer lugar, use TokenProvider.CreateOAuthTokenProvider (new List () {rootAddressManagement}, new NetworkCredential ("YouUser", "YouPassword"));

Nota: no especifique el nombre de la máquina como parte de YourUser


estoy atrapado en el mismo error. seguí los pasos como se describe en la segunda publicación. pero finalmente terminan con "Esto me llevó un paso más allá. Mi aplicación se conectó y creo la cola, pero falló al intentar colocar un mensaje en la cola. El mensaje que recibo ahora es: System.IdentityModel.Tokens. SecurityTokenValidationException: el certificado X.509 CN = MACHINE_NAME no está en la tienda de personas de confianza. Error en la creación de la cadena CN = MACHINE_NAME del certificado X.509. El certificado que se usó tiene una cadena de confianza que no se puede verificar. Reemplace el certificado o cambie el certificateValidationMode. La función de revocación no pudo verificar la revocación del certificado ".


Tengo malas noticias y buenas noticias. Las malas noticias es que no pueden enviar el mensaje usando el método microsoft.servicebus.dll. Para mí, no puedo conectar el bus de servicio de Windows utilizando microsoft windows.servicebus.dll. Cuando intenté enviar el mensaje me quedé atrapado en la operación de envío de mensajes y no pude continuar más allá de ese punto. Sospecho que el problema es Publicar en Azure Service Bus en lugar de http detrás del proxy que es un error en la versión actual.

Una buena noticia es que logré hacer toda la operación del bus de servicio usando la API de descanso.

Lo primero es obtener el token de autenticación utilizando el siguiente ejemplo de código proporcionado por microsft.

http://msdn.microsoft.com/en-us/library/windowsazure/jj193003%28v=azure.10%29.aspx

Una vez que obtenga el token, el resto de la operación (crear que, enviar mensajes, recibir mensajes) es lo mismo que el bus de servicio de Windows Azure. Consulte los detalles sobre la documentación de Microsoft sobre la operación del bus de servicio.

http://msdn.microsoft.com/en-us/library/windowsazure/hh690927.aspx espero que esto sea útil. Gracias.