Как получить и сравнить сертификаты с веб-серверов? - PullRequest
1 голос
/ 22 ноября 2011

Я пытаюсь перенести код Java на C #, и мой успех пока отстает от веб-сертификатов ... Я могу успешно получить те же результаты, передавая параметры без сравнения, но я чувствую, что это необходимо реализовать ...

Это основной метод, который я использую для входа на сервер и отправки данных: Как использовать HttpWebRequest для входа на сайт? ... после этого я извлекаю данные из потока ответов. Все работает, но мне интересно, нужно ли мне даже сравнивать.

[Java] ~ что изначально сделано

// connection is an HttpsURLConnection object
Certificate[] certs = connection.getServerCertificates();

byte[] bytes = getKey(); // gets the file.key byte array

Certificate c = certs[0];
PublicKey pk = c.getPublicKey();
byte[] data = pk.getEncoded();

for (int i = 0; i < data.length; i++) {
     if (data[i] == bytes[i]) continue;
     throw new RuntimeException("Public key mismatch");
}

[C #] ~ что я сейчас пытаюсь сделать

byte[] bytes = Properties.Resources.Key;
// connection is a HttpWebRequest object
X509CertificateCollection collection = connection.ClientCertificates;
X509Certificate c = collection[0];
// I'm practically guessing on the parameters because I'm new to the
// web handling in C#...
PublicKey pk = new PublicKey(
    new Oid(), 
    new AsnEncodedData(Encoding.UTF8.GetBytes(urlParameters)), 
    new AsnEncodedData(c.GetPublicKey()));
byte[] data = pk.EncodedKeyValue.RawData;
for (int i = 0; i < data.Length; i++)
    if (data[i] == bytes[i]) continue; 
    else throw new Exception("Public key mismatch");
...