Configuration de SSL sur ASP.NET Auto-Hébergé Web API
Je suis de la création d'Auto-hébergé API Web service. Pour le fixer, j'ai étudié et mis en œuvre cette article, réussi à générer un Certificat SSL local à l'aide de makecert et mon service authentifié et génère des jetons de bien, si je suis en utilisant
http://localhost/webapi/authentication/authenticate
lien, mais quand j'essaie d'accéder à mon service à l'aide de HTTPS, je reçois la suite sur Firefox:
ssl_error_rx_record_too_long
et pour la même demande Fiddler me montre:
HTTP/1.1 502 Fiddler - Échec de la Connexion Date: Mon, 26 Aug 2013
10:44:27 GMT Content-Type: text/html; charset=UTF-8 Connection: close
Timestamp: 13:44:27.433[Fiddler] La socket de connexion à localhost a échoué.
A échoué à
négocier la connexion HTTPS avec le serveur.fiddler.réseau.https>
Échoué à sécuriser la connexion existante pour localhost. La poignée de main
a échoué en raison d'un format de paquet inattendu..
Mon auto-configuration de l'hôte:
private HttpSelfHostServer _server;
private ExtendedHttpsSelfHostConfiguration _config;
public const string ServiceAddress = "https://localhost/webapi";
_config = new ExtendedHttpsSelfHostConfiguration(ServiceAddress);
_server = new HttpSelfHostServer(_config);
_server.OpenAsync();
où ExtendedHttpSelfHostConfiguration prises de ce post est:
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);
}
}
Ce que je suis absent?
Merci à l'avance!
- Le lien vers l'article dans votre question n'est pas bon: pfelix.wordpress.com/2012/02/26/...
- Un peu plus propre case pour https: BaseAddress.Régime == "https"
Vous devez vous connecter pour publier un commentaire.
Selon ce blog j'ai compris, que je devrais créer un certificat SSL et de l'attribuer à un port spécifique (:99 dans mon cas).
J'ai créé localement signé le protocole SSL. Ensuite obtenu son Empreinte et identificateur applicationid. À l'aide de commande CMD netsh (en pré Win7 systèmes, il existe une httpcfg outil), j'ai assigné mon certificat pour le port
netsh http add sslcert ipport=0.0.0.0:99 certhash=3e49906c01a774c888231e5092077d3d855a6861 appid={2d6059b2-cccb-4a83-ae08-8ce209c2c5c1}
, où certhash = SSL Empreinte, et appid = identificateur applicationid j'ai copié plus haut.Ça y est, maintenant je suis capable de faire des requêtes HTTPS!
Le certificat sera créé avec le nom que vous avez spécifié, le trouver.
Maintenant que vous avez créé le cert, il est temps de lier le port que vous utilisez dans le self de l'hôte. si c'était https://localhost:5000
netsh http add sslcert ipport=0.0.0.0:5000 certhash=[cert-thumbprint] appid={[App-Id]}
[assembly: Guid("[app-id]")]
Vous êtes fait!
Première approche à l'aide de Code:
Dans le fichier de configuration web de mettre de code suivant:
Deuxième approche à l'aide de l'Attribut: Si vous ne souhaitez pas utiliser la 1ère approche, vous pouvez décorer la classe de contrôleur ou de la méthode d'action avec
RequireHttpsAttribute
.