Utilisation de System.Net.WebClient avec un certificat HTTPS
Dans mon C# client Windows, j'ai un POST de présentation de "la mère". Je veux que les données dans le soumet à être sécurisé, bien sûr, donc j'ai payé pour HostGator de me délivrer un certificat SSL.
J'ai sauvé au large de la .Fichier CER, et je suis de la construction de la requête en tant que telle:
//wrapper for WebClient object to use certificate file
class SecureWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
string certPath = @"e:\mycertificate.cer";
X509Certificate myCert = X509Certificate.CreateFromCertFile(certPath);
request.ClientCertificates.Add(myCert);
return request;
}
}
//request
private static SecureWebClient client = new SecureWebClient();
private static NameValueCollection = new NameValueCollection();
nvc.Add(POST_ACTION, ACTION_CODE_LOGIN);
nvc.Add(POST_EMAIL, email);
nvc.Add(POST_PASSWORD, password);
sResponse = System.Text.Encoding.ASCII.GetString(client.UploadValues(BASE_URL + ACTION_PAGE, nvc));
Son lancement d'un Système.Net.WebException:
La connexion sous-jacente a été fermée: Une erreur inattendue s'est produite lors de l'envoi.
La InnerException est un Système.IO.IOException:
La négociation a échoué en raison d'un format de paquet inattendu.
Toute réflexion sur ce que je fais de mal?
source d'informationauteur Honus Wagner
Vous devez vous connecter pour publier un commentaire.
Si vous êtes pas à l'aide de client certificats et vous peut accéder à votre serveur à l'aide de https:// puis votre code devrait ressembler à:
Tant que votre BASE_URL utilise https:// alors toutes les données (vers et depuis le serveur) seront cryptées.
OIE à l'aide de SSL/TLS à partir d'un client à un serveur ne nécessite pas le client à faire quelque chose de spécial (avec certificat), en plus de l'utilisation https:// le système, car le système d'exploitation fournit tout (par exemple racines de confiance), vous devez sécuriser la transmission des données.
Client certificats de travail seulement si la clé privée est disponible. Ce n'est pas généralement le cas lors de l'utilisation .cer fichiers depuis le X. 509 certificat ne pas inclure la clé privée.
La seule sûr façon de s'assurer de la clé privée est disponible pour charger le certificat à partir d'un fichier PKCS#12, où à la fois le certificat(s) et la clé privée sont disponibles (par exemple les deux ont été exportées dans le .pfx fichier).
Notes:
Je l'ai dit généralement car Windows/CryptoAPI ne sont, parfois, certains magie (lorsqu'il est utilisé avec X509Certificate) et d'associer automatiquement un certificat avec une clé privée du certificat.les magasins de clés.
Je l'ai dit sûr parce que cela va travailler sur Mono, pas juste des MS .NET.
Sonne comme vous le faites à l'envers. Vous devriez avoir la SLL Certificat installé sur l'hôte web/serveur. Ensuite, vous créez une requête web au serveur web et exige le protocole HTTPS.
Il suffit de connecter à votre serveur avec le protocole RDP
Ouvrez internet explorer et accédez à Options Internet
Accédez à l'Onglet Avancé et Permettre à la fois de l'Utilisation de SSL 2.0 et SSL 3.0
Maintenant votre serveur demande sera authentifié