Bu sayfa salt okunur. Kaynağı görebilirsiniz ama değiştiremezsiniz. Bunun yanlış olduğunu düşünüyorsanız yöneticiye danışın.
Signature verification is a series of operations performed by the signature checkers. These checkers consist of structural checkers and signing certificate checker. The certificate checker performs the structural validation chain validation and revocation status control for a signing certificate. Certificate revocation status control needs CRL or OCSP Response valid in signing time. Certificate validation requires validation policy file. This XML file can be configured by adjusting several parameters. See the section Parameters or the class EParameters fot the list of the parameters.
The class SignedDataValidation is responsible for signature verification. By using its method verify(…), you can perform verification. It takes the signature to be verified and verification parameters as input. This method verifies the signed document as a whole. If any of the signatures in the document is invalid, then verify(…) returns false. The sample code for signature verification:
SignedDataValidation
verify(…)
false
<sxh java;title:Java> byte[] signedData = AsnIO.dosyadanOKU(SIGNATURE_FILE); ValidationPolicy policy= PolicyReader.readValidationPolicy(new FileInputStream(POLICY_FILE));
Hashtable<String, Object> params = new Hashtable<String, Object>(); params.put(EParameters.P_CERT_VALIDATION_POLICY, policy);
SignedDataValidation sdv = new SignedDataValidation();
SignedDataValidationResult sdvr = sdv.verify(signedData, params);
if(sdvr.getSDStatus() != SignedData_Status.ALL_VALID)
System.out.println("İmzaların hepsi doğrulamadı");
System.out.println(sdvr.toString()); </sxh>
<sxh csharp;title:C#> byte[] signedData = AsnIO.dosyadanOKU(SIGNATURE_FILE); ValidationPolicy policy = PolicyReader.readValidationPolicy(new FileStream(POLICY_FILE, FileMode.Open, FileAccess.Read));
Dictionary<String, Object> params_ = new Dictionary<String, Object>(); params_[EParameters.P_CERT_VALIDATION_POLICY] = policy;
SignedDataValidationResult sdvr = sdv.verify(signedData, params_);
if (sdvr.getSDStatus() != SignedData_Status.ALL_VALID) Console.WriteLine("İmzaların hepsi doğrulamadı"); Console.WriteLine(sdvr.ToString()); </sxh>
If the signature is attached, the method getContent() of the class BaseSignedData can be used to get the signed content.
getContent()
BaseSignedData
SignedDataValidation sınıfının verify(…) fonksiyonu doğrulama sonucu olarak SignatureValidationResult tipinde bir nesne döner. getSDStatus() fonksiyonu, eğer bütün imzalar doğrulanmış ise ALL_VALID, eğer imzalardan en az bir tanesi doğrulanamamışsa NOT_ALL_VALID döner. SignedDataValidation nesnesinin toString() metodu, bütün imzalar için kontrol sonucu açıklamalarını döner. Eğer özellikle bir imzanın sonucu elde edilmek isteniyorsa, bu sonuç imza ağacında gezerek elde edilebilir. Bu ağaç yapısı, BaseSignedData yapısındaki imzaların veri yapısı ile aynıdır. Örneğin birinci paralel imzanın, birinci seri imzasına ve bu imzanın doğrulama sonucuna aşağıdaki örnek kod ile ulaşılabilir.
SignatureValidationResult
getSDStatus()
ALL_VALID
NOT_ALL_VALID
toString()
<sxh java;title:Java> BaseSignedData bs = getBaseSignedData(); SignedDataValidationResult sdvr = getValidationResult(); SignerfirstCounterSigner = bs.getSignerList().get(0).getCounterSigners().get(0); SignatureValidationResultfirstCounterSignerVR = sdvr.
getSDValidationResults().get(0). getCounterSigValidationResults(). get(0);
</sxh> <sxh csharp;title:C#> BaseSignedData bs = getBaseSignedData(); SignedDataValidationResult sdvr = getValidationResult(); Signer firstCounterSigner = bs.getSignerList()[0].getCounterSigners()[0]; SignatureValidationResult firstCounterSignerVR = sdvr.getSDValidationResults()[0].
getCounterSigValidationResults()[0];
</sxh>
Her imzanın doğrulama sonucu SignatureValidationResult nesnelerinde tutulur. Bir imzacının doğrulama sonucundan, seri imzacılarının doğrulama sonuçlarına da erişilebilir. SignatureValidationResult nesnelerinin toString() fonksiyonu, imzacının ve seri imzacıların doğrulama kontrolcülerinin sonuçlarını döner. Eğer sadece o imzaya ait kontrolcülerin açıklamaları elde edilmek isteniyorsa getValidationDetails() fonksiyonunu kullanılmalıdır. İmza tipi geliştikçe, kontrol edilmesi gereken yapı ve sertifika sayısı artmaktadır. Zaman damgaları, imza yapısına bir imza olarak eklendiklerinden ayrıca bir imza olarak kontrol edilmektedirler.
getValidationDetails()
SignatureValidationResult nesnesinden bir imzanın doğrulama sonucu getSignatureStatus() fonksiyonu ile Signature_Status yapısında alınabilir. Eğer imza sonucu INCOMPLETE ise sertifika doğrulama verisine ulaşılamamıştır.
getSignatureStatus()
Signature_Status
INCOMPLETE
Bir imzanın doğrulanması için, imza atıldıktan sonra sertifika iptal bilgilerinin güncellenebilmesi için belirli bir süre geçmesi gerekmektedir. Bu süreye "kesinleşme süresi"(grace period) denilmektedir. API'de bu süre P_GRACE_PERIOD parametresi ile ayarlanabilir; varsayılan değeri 86400 saniye yani 24 saattir.
P_GRACE_PERIOD
Bir imza doğrulanmaya çalışıldığında, kesinleşme süresi bitmemiş olsa bile imza ve sertifika doğrulanabilmektedir. Öndoğrulama denilen bu doğrulama bir kesinlik içermemektedir. Kesin bir doğrulama yapılabilmesi için kesinleşme süresinin geçmesi gerekmektedir. Bir imzanın doğrulanmasının ön doğrulama olduğunu aşağıdaki örnek kod ile öğrenebilirsiniz. Ön doğrulama için olgunlaşmamış anlamına gelen "PREMATURE" kelimesi, kesinleşmiş imza için olgunlaşmış anlamına gelen "MATURE" kelimesi kullanılmaktadır.
SignatureValidationResult nesnesinin getValidationState() fonksiyonu ile ön doğrulama yapılıp yapılmadığı bilgisi alınabilir.
getValidationState()
<sxh java;title:Java> SignedDataValidationResultsdvr = getValidationResult();
if(sdvr.getSDValidationResults().
get(0).getValidationState() == ValidationState.PREMATURE) System.out.println("Ön doğrulama yapıldı.");
</sxh> <sxh csharp;title:C#> SignedDataValidationResult sdvr = getValidationResult(); if (sdvr.getSDValidationResults()[0].getValidationState() == ValidationState.PREMATURE) Console.WriteLine("Ön doğrulama yapıldı"); </sxh>
Ön doğrulama ile kesin doğrulama arasında doğabilecek fark; ön doğrulama sırasında geçerli olan bir sertifikanın, kesin doğrulamada iptal edilmiş olabilmesidir. Kullanıcı akıllı kartını çaldırdığında bu senaryo ile karşılaşılabilir.
ÇiSDuP için kesinleşme süresi kısa olabilmektedir. Yalnız iptal bilgileri için SİL kullanılıyorsa bu süre uzayabilmektedir.
"E-İmza Profilleri" dökümanı ÇiSDuP kullanıldığında kesinleşme süresinin çok kısa olduğundan yok sayılabileceğini öngörüyor. ÇiSDuP kullanarak sertifika doğrulama yapıldığında, kesinleşme süresi için beklenmediğinden büyük avantaj sağlanmaktadır.
Ayrık imza doğrulanırken, imzalanan dökümanının parametre olarak verilmesi gerekmektedir.Bunun için P_EXTERNAL_CONTENT parametresine ISignable türünden nesne verilmelidir.
P_EXTERNAL_CONTENT
<sxh java;title:Java> byte[] signedData = AsnIO.dosyadanOKU(SIGNATURE_FILE); ISignable content = new SignableFile(new File(CONTENT_FILE));
ValidationPolicy policy = PolicyReader.readValidationPolicy(new FileInputStream(POLICY_FILE)); Hashtable<String, Object> params = new Hashtable<String, Object>(); params.put(EParameters.P_CERT_VALIDATION_POLICY, policy); params.put(EParameters.P_EXTERNAL_CONTENT, content );
SignedDataValidation sdv = new SignedDataValidation(); SignedDataValidationResult sdvr = sdv.verify(signedData, params);
System.out.println(sdvr.toString()); </sxh> <sxh csharp;title:C#> byte[] signedData = AsnIO.dosyadanOKU(SIGNATURE_FILE); ISignable content = new SignableFile(new FileInfo(CONTENT_FILE));
ValidationPolicy policy = PolicyReader.readValidationPolicy(new FileStream(POLICY_FILE, FileMode.Open, FileAccess.Read)); Dictionary<String, Object> params_ = new Dictionary<String, Object>(); params_[EParameters.P_CERT_VALIDATION_POLICY] = policy; params_[EParameters.P_EXTERNAL_CONTENT] = content;
SignedDataValidation sdv = new SignedDataValidation(); SignedDataValidationResult sdvr = sdv.verify(signedData, params_);
if (sdvr.getSDStatus() != SignedData_Status.ALL_VALID) Console.WriteLine("İmzaların hepsi doğrulamadı");
Console.WriteLine(sdvr.ToString()); </sxh>