C# ve .NetCF kullanarak bir X.509 sertifikasını doğrulamaya çalışıyorum. CA sertifikam var ve doğru bir şekilde anladıysam güvenilmeyen sertifikanın imzasını çözmek için bu CA sertifikasındaki ortak anahtarı kullanmam gerekir. Bu bana güvenilmeyen sertifikanın hesaplanan karma değerini vermelidir. Daha sonra sertifikanın karmasını kendim hesaplamalıyım ve iki değerin eşleştiğinden emin olmalıyım.X.509 Sertifikasyonu nasıl yapılır? C# ile Compact Framework kullanarak doğrulayın.
Birkaç gün boyunca bununla oynuyordum ve çok uzağa gitmiyorum. X509Certificate ve RSACryptoServiceProvider sınıflarını kullanıyorum. İlk olarak, X509Certificate sınıfından açık anahtar ve imza almayı denedim. Kamusal anahtarı alabildim ama imzayı alamadım. Ardından, sertifikayı oluşturan ikili verileri ayrıştırmayı denedim, bu da imzayı (ve istediğim diğer verileri) almamı sağladı, ancak RSACryptoServiceProvider kullanarak imzayı çözemedim. Böyle şeyler denedim ama şifresini çalıştığımda "Kötü Anahtarı" diyerek alma istisnaları tuttu: Herhangi bir tavsiye büyük takdir
RSAParameters rsaParams = new RSAParameters();
rsaParams.Exponent = exp;
rsaParams.Modulus = mod;
RSACryptoServiceProvider rsaServ = new RSACryptoServiceProvider();
rsaServ.ImportParameters(rsaParams);
byte[] decryptedSig = rsaServ.Decrypt(encryptedSig, false);
.
Düzelt: Daha iyi görünüyor ama garip bir sonuç döndüren bir şey denedim. Test için biraz daha kolay olduğu için X509Certificate2 sınıfı ile çalışıyorum ama daha sonra .NetCF için X509Certificate'a geçmem gerekecek. Ben RSACryptoServiceProvider.VerifyData ihtiyacım olan şey olabileceğini düşünüyorum. Aşağıdaki kodu denedim. Dediğim gibi
X509Certificate2 cert = new X509Certificate2(certBytes);
X509Certificate2 certCA1 = new X509Certificate2(@"C:\certs\certCA1.cer");
byte[] encryptedSig = new byte[256];
Array.Copy(certBytes, certBytes.Length - 256, encryptedSig, 0, 256);
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)certA1.PublicKey.Key;
bool good = rsa.VerifyData(cert.RawData, "1.3.14.3.2.26", encryptedSig);
, elle çözmek ve sertifikanın ikili veri yorumlamak mümkün duyuyorum, bu yüzden cert.RawData Sertifikanın imzalı veriler ve son 256 byte şifrelenmiş imza vardır eminim . Dize, sertifikadan aldığım karma algoritmanın OID'idir, ancak doğru olduğundan% 100 emin değilim. VerifyData yanlış döndürür, ancak neden henüz emin değilim.
Düşünceler?
WinCE'nin sınırlamaları zor olabilir ve X.509 için tamamen yeniyim, bu yüzden aslında bunu normal bir Win32 ortamında çalıştırmaya çalışıyorum ve bunu bile yapamıyorum. İşaretlediğiniz CLR Güvenlik kitaplığına bir göz attım, ancak X509 sertifikasını doğrulamak için orada hiçbir şey görmedim. Devam etmek için biraz daha verir misin? – Ben
Yanıtı örnek kod ile güncelledim. – dthorpe
X509Certificate2. NetCF'de bulunmamaktadır, ancak bu yardımcıdır. Teşekkürler. – Ben