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!