Когда линия для извлечения открытого ключа выполняется, запрос LDAP посылается:Построив RSACryptoServiceProvider из X509Certificate2 без запроса LDAP делается
this.certificate = new X509Certificate2(buffer);
System.Security.Cryptography.X509Certificates.PublicKey key = this.certificate.PublicKey;
50 0,853745000 xxx.xxx.xxx.xxx xxx.xxx .xxx.xxx LDAP 404 searchRequest (1) "" baseObject
... который, как я считаю, аутентифицирует текущего пользователя. Мне действительно нужно избегать этого вызова, так как на клиентской системе это вызывает длительную задержку из-за конфигурации сети.
Я предполагаю, что он пытается выполнить некоторую аутентификацию в каком-либо хранилище ключей, но так как в этом случае сертификат содержится в предоставленном буфере, все, что я хочу, это использовать ключ без этого запроса послал.
Все, что я действительно хочу, это создать RSACryptoServiceProvider из закрытого ключа в сертификате. Я попробовал несколько методов, которые я нашел здесь, используя GetPrivateKey, но изо всех сил пытался заставить что-то работать.
Заранее благодарен!
EDIT программы Тест:
static void Main(string[] args)
{
var certificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(@"E:\Temp\Cert.cer");
System.Security.Cryptography.X509Certificates.PublicKey key = certificate.PublicKey;
}
Свидетельство я тестировал с можно найти здесь: Cert.cer
Да, это не самая сильная подпись или ключ, прежде чем я получаю комментарии!
Еще раз спасибо.
EDIT: Я действительно работал вокруг этого, используя предложение использовать BouncyCastle. Я использую это для разбора сертификата:
X509CertificateParser parser = new X509CertificateParser();
Org.BouncyCastle.X509.X509Certificate cert = parser.ReadCertificate(buffer);
Я тогда извлечь модуль и экспоненту и толкать их в RSAParameters Microsoft:
RsaKeyParameters key = (RsaKeyParameters)cert.GetPublicKey();
// Construct a microsoft RSA crypto service provider using the public key in the certificate
RSAParameters param = new RSAParameters();
param.Exponent = key.Exponent.ToByteArrayUnsigned();
param.Modulus = key.Modulus.ToByteArrayUnsigned();
Затем я могу построить Microsoft RSACryptoServiceProvider из этого:
using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider())
{
provider.ImportParameters(param);
byte[] rsaBlock = provider.Encrypt(preMasterSecret, false);
this.Client.Writer.Write(rsaBlock);
}
вы уверены, что это строка выполняет запрос LDAP? Можете ли вы показать нам больше кода? – Crypt32
Я воспроизвел это с помощью простой тестовой программы и самозаверяющего сертификата. Я обновлю вопрос с помощью тестового кода. –
И да, когда я перехожу на вторую строку, я получаю следующее в Wireshark: [link] (https://dl.dropboxusercontent.com/u/106407239/Wireshark%20from%20private%20key.png) –