2011-10-27 1 views
1

Après avoir résolu mon problème lié à XMLRPC.NET + HTTPs, j'ai effectué des tests réussis sur Windows avec cette solution d'exemple client/serveur XMLRPC mais je n'ai pas réussi à connecter le client (fonctionnant sous Mono Linux) au serveur (fonctionnant sous Windows 7). J'utilise des certificats auto-générés pour tester (à la fois dans le client et le serveur), mais cela ne fonctionne pas pour le client sous Linux.Échec de Mono C# HTTPs (XMLRPC.NET): certificat client ou problème de certificat de serveur?

Comme vous pouvez le voir, le code client génère un certificat X509 au démarrage:

System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy(); 
IStateName proxy = XmlRpcProxyGen.Create<IStateName>(); 
XmlRpcClientProtocol cp = (XmlRpcClientProtocol)proxy; 
cp.Url = "https://127.0.0.1:5678/"; 
cp.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(@"C:\path\to\your\certificate\file\my.cer")); 
cp.KeepAlive = false; 

et il est conçu pour accepter tous les certificats, même non fiables. Mais malgré cela, ça ne marche toujours pas.

En outre, certains tests utilisant wget montre que wget https://www.google.com/ contacte avec succès et télécharge certificat, mais pas dans mon cas avec wget https://192.168.1.3:5678/, et même avec --no-check-certificate.

Quelqu'un a-t-il une idée de ce qui se passe? Merci beaucoup.

Répondre

0

Réponse rapide: Votre fichier .cer ne contient pas de clé privée et ne peut donc pas être utilisé pour les certificats clients.

des réponses plus longues

Alors, comment fonctionne-t-il sur Windows? CryptoAPI va interroger son magasin de certificats pour voir si une clé privée, correspondant au certificat, existe. Si c'est le cas, il va le charger automagiquement

Comment cela peut-il fonctionner sur Mono? La solution la plus simple consiste à créer une instance X509Certificate2 qui charge un fichier PKCS # 12 (c'est-à-dire généralement suivi d'un suffixe .pfx ou .p12). Ce fichier (s'il est généré correctement) inclura à la fois le certificat X.509 et la clé privée - permettant à Mono d'utiliser le certificat dans ce contexte.

+0

Salut et merci, poupou. Donc, si je comprends bien, sur Mono, je dois créer un fichier PKCS (en utilisant makecert?), Puis charger ce fichier en utilisant la classe 'X509Certificate2'? – virrea

+0

Mono's makecert peut créer des fichiers PKCS # 12. Les versions plus anciennes (pas sûres pour les plus récentes) de Microsoft makecert ne pouvaient pas. Mais ** oui ** une fois que vous avez un fichier PKCS # 12, vous pourrez utiliser le fichier X509Certificate2 pour le lire (avec un mot de passe optionnel pour protéger la clé privée) – poupou