services net asp c# ssl asp.net-web-api

c# - services - Configuración de SSL en ASP.NET Self-Hosted API de la web



web api authentication facebook (1)

Estoy creando un servicio de API web alojado en uno mismo. Para asegurarlo, he estudiado e implementado this artículo, he generado con éxito un certificado SSL local utilizando makecert y mi servicio autenticado y genera tokens bien, si estoy usando

http://localhost/webapi/authentication/authenticate

enlace, pero cuando trato de acceder a mi servicio usando HTTPS, obtengo seguimiento en Firefox:

ssl_error_rx_record_too_long

y para la misma solicitud Fiddler me muestra:

HTTP / 1.1 502 Fiddler - Falló la conexión Fecha: Lun, 26 Ago 2013 10:44:27 GMT Content-Type: text / html; charset = UTF-8 Connection: close Marca de tiempo: 13: 44: 27.433

[Fiddler] Falló la conexión del socket al localhost.
Error al negociar la conexión HTTPS con server.fiddler.network.https> Error al asegurar la conexión existente para localhost. El apretón de manos falló debido a un formato de paquete inesperado.

Mi configuración de auto-host:

private HttpSelfHostServer _server; private ExtendedHttpsSelfHostConfiguration _config; public const string ServiceAddress = "https://localhost/webapi"; _config = new ExtendedHttpsSelfHostConfiguration(ServiceAddress); _server = new HttpSelfHostServer(_config); _server.OpenAsync();

donde ExtendedHttpSelfHostConfiguration tomado de esta publicación es:

public class ExtendedHttpSelfHostConfiguration : HttpSelfHostConfiguration { public ExtendedHttpSelfHostConfiguration(string baseAddress) : base(baseAddress) { } public ExtendedHttpSelfHostConfiguration(Uri baseAddress) : base(baseAddress) { } protected override BindingParameterCollection OnConfigureBinding(HttpBinding httpBinding) { if (BaseAddress.ToString().ToLower().Contains("https://")) { httpBinding.Security.Mode = HttpBindingSecurityMode.Transport; } return base.OnConfigureBinding(httpBinding); } }

¿Qué me estoy perdiendo? ¡Gracias por adelantado!


De acuerdo con esta publicación del blog , he descubierto que debería crear un certificado SSL y asignarlo a un puerto específico (: 99 en mi caso).

Creé SSL firmado localmente. Luego obtuve Thumbprint y ApplicationId . Usando el comando CMD netsh (en los sistemas anteriores a Win7 hay una herramienta httpcfg ), asigné mi certificado al puerto

netsh http add sslcert ipport=0.0.0.0:99 certhash=3e49906c01a774c888231e5092077d3d855a6861 appid={2d6059b2-cccb-4a83-ae08-8ce209c2c5c1} , donde certhash = SSL Thumbprint y appid = ApplicationId que he copiado anteriormente.

¡Eso es todo, ahora puedo hacer solicitudes HTTPS!