Merhaba, geçenlerde bir ihtiyaç üzerine Kamu Sertifikasyon Merkezi (https://yazilim.kamusm.gov.tr) tarafından sunulan e-imza kütüphanesi ile tanıştım. Burada hem C#, hem de Java örnek kodları vardı.
Örneği ayağa kaldırmaktansa, onu referans alarak basit bir uygulama yazdım. Hem oradaki gibi .p7s dosyası oluşturabildim, hem de bir PDF belgesini imzalayabildim. İhtiyacı olanlar için de buraya çalışan halini koyuyorum.
- Öncelikle KamuSm’den indirdiğim örnek projenin içerisindeki BENİOKU.txt içerisinde verilen yönergeleri uyguladım.
http://depo.kamusm.gov.tr/depo/SertifikaDeposu.svt adresinden “SertifikaDeposu.svt” dosyasını,
http://depo.kamusm.gov.tr/depo/SertifikaDeposu.xml adresinden “SertifikaDeposu.xml” dosyasını indirebilirsiniz.
Bu dosyaları c:\Users\kullanıcıadı\.sertifikadeposu\ dizini altına kopyalamalısınız. - “lib” dizini altında kullanmanız gereken dll dosyaları bulunmaktadır. Onların hepsini projenin altında lib dizini içine koydum.
- Ben C altına EImza diye bir dizin açtım. İşlemleri orada yaptım.
- Aldığım hatalar neticesinde certval-policy.xml dosyasına aşağıdaki satırları ekledim.
- Örnekle uyumlu olması açısından .net FrameWork 3.5 ile yazdım ben de.
- Örneklerde PDF dosyasını imzalama yoktu. Onu da internette bir arkadaşın örneğinden faydalanarak hallettim.
Örnek projeyi de buraya bırakıyorum. Belki birilerinin işine yarar.
https://tolgakoyuncu.com.tr/KonsolEImza.zip
İmzalanmış Pdf Çıktısı
E-İmza Bilgisinin Alınması
SmartCardManager smartCardManager = SmartCardManager.getInstance();
var smartCardCertificate = smartCardManager.getSignatureCertificate(false,false);
var signer = smartCardManager.getSigner(request.DonglePassword, smartCardCertificate);
CERTIFICATE = smartCardCertificate.asX509Certificate2();
externalSignature = new SmartCardSignature(signer, CERTIFICATE, “SHA-256”);
Not: Burada kullanılan kod parçacığı KamuSM’in SmardCardManager.cs isimli sınıfından alınmıştır.
İmzalanmış PDF’in İmza bilgisinin Kontrolü
Uygulama Uyarı Mesajı
İmza Bilgisinin Kontrolü
PdfReader reader = new PdfReader(pdfContent);
AcroFields fields = reader.AcroFields;
List names = fields.GetSignatureNames();for (int i = 1; i < names.Count + 1; i++) {
//Birden fazla imza olabildiği için döngüyle her imza kontrol edildi.
string temp = string.Empty;
PdfPKCS7 pkcs7 = fields.VerifySignature(names[i – 1]);
var result = pkcs7.Verify();
if (result) { temp = string.Format(“{0}.imza geçerli.”, i); ;
} else {
temp = string.Format(“{0}.imza geçersiz.”, i);
}
message += temp;
}
https://github.com/mfarkan/E-Imza-iTextSharp-ESYA-Api