Ошибка моно C # HTTPs (XMLRPC.NET): сертификат клиента или сертификат сервера? - PullRequest
1 голос
/ 27 октября 2011

После решения моей проблемы, связанной с XMLRPC.NET + HTTP , я провел несколько успешных тестов на Windows с этим примером решения клиент / сервер XMLRPC, но не смог подключить клиент (работающий на Mono Linux) на сервер (работает на Windows 7). Я, конечно, использую самостоятельно сгенерированные сертификаты для тестирования (как на клиенте, так и на сервере), но он не работает для клиента в Linux.

Как видите, клиентский код генерирует сертификат X509 при запуске:

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;

и он предназначен для принятия всех сертификатов, даже недоверенных. Но, несмотря на это, он все равно не работает.

Кроме того, некоторые тесты с использованием wget показывают, что wget https://www.google.com/ успешно связывается и загружает сертификат, но не в моем случае с wget https://192.168.1.3:5678/ и даже с --no-check-certificate.

Кто-нибудь имеет представление о том, что происходит? Большое спасибо.

1 Ответ

0 голосов
/ 27 октября 2011

Быстрый ответ: Ваш файл .cer не содержит личного ключа, поэтому его нельзя использовать для клиентских сертификатов.

Более длинные ответы

Так как это работает в Windows? CryptoAPI запросит хранилище сертификатов, чтобы узнать, существует ли закрытый ключ, соответствующий сертификату. Если это произойдет, то он загрузит его автоматически

Как это может работать на Mono? Самое простое решение - создать экземпляр X509Certificate2, который загружает файл PKCS # 12 (т. Е. Обычно с суффиксом .pfx или .p12). Этот файл (если он генерируется правильно) будет включать в себя как сертификат X.509, так и закрытый ключ - что позволяет Mono использовать сертификат в этом контексте.

...