İmza atma işleminden önce sertifika doğrulaması yapılmaktadır. Böylece iptal edilmiş veya hatalı bir sertifika ile imza atılması önlenir. İmzacının sertifikasının doğrulanması parametreler yardımıyla devre dışı bırakılabilir. Bu işlem için Parametreler bölümünde yer alan P_VALIDATE_CERTIFICATE_BEFORE_SIGNING
parametresini inceleyebilirsiniz.
İmza atarken ve imza doğrulama sırasında CMS Signature kütüphanesi imzacıların sertifikalarını doğrular. Eğer sertifika doğrulamasında bir hata çıkarsa CertificateValidationException
hatası fırlatılmaktadır. Sertifika doğrulama ile ilgili ayrıntılı bilgi için Sertifika Doğrulama bölümüne bakabilirsiniz. Bu dökümanda ayrıntılı bir şekilde açıklanan ve sertifikaların doğrulama işlemlerinin nasıl yapılacağını belirten sertifika doğrulama politikası EParameters.P_CERT_VALIDATION_POLICY
parametresine ValidationPolicy
nesnesi tipinde verilir.
İmza yapısı BaseSignedData
sınıfı tarafından işlenmektedir. Bu yapıda seri ve paralel imzacılar bir ağaç yapısında bulunmaktadırlar. BaseSignedData
sınıfının getSignerList()
fonksiyonu ile birinci seviye imzacılar alınmaktadır. Sadece paralel imza atılmışsa getSignerList()
fonksiyonu ile bütün imzacılar alınmış olur. Seri imzacıları almak için ise seri imzacıları alınmak istenen imzacının getCounterSigners()
fonksiyonu çağrılmalıdır. Eğer imza seviyeleri önemli değilse, BaseSignedData sınıfının getAllSignerList() fonksiyonu kullanılarak bütün imzacılar alınabilir. Daha ayrıntılı bilgi için örnek kodlar içinde yer alan SignersInJTree sınıfını inceleyebilirsiniz.
İmza işlemlerinde, imza atan kişiyi tanımlama işlemi kişinin sertifikası üzerinden yapılmaktadır. Sertifikanın imza yapısına eklenmesi genel olarak tercih edilmektedir. ESYA kütüphanesinde de sertifika imza yapısına eklenmektedir. Sertifikadan, kişinin ismi ve Türkiye için TC. kimlik numarası alınabilir.
BaseSignedData bsd = new BaseSignedData(signedData); ECertificate cert = bsd.getSignerList().get(0).getSignerCertificate(); if(cert == null){ System.out.println("İmzaci bilgisi yok"); } else { System.out.println("İsim & Soyisim: " + cert.getSubject().getCommonNameAttribute()); System.out.println("TC Kimlik No: " + cert.getSubject().getSerialNumberAttribute()); }
BaseSignedData bsd = new BaseSignedData(signedData); ECertificate cert = bsd.getSignerList()[0].getSignerCertificate(); if (cert == null) { Console.WriteLine("Imzaci bilgisi yok"); } else { Console.WriteLine("Isim & Soyisim: " + cert.getSubject().getCommonNameAttribute()); Console.WriteLine("TC Kimlik No: " + cert.getSubject().getSerialNumberAttribute()); }