ข้ามไปยังเนื้อหา
getnextpdf.com

Enterprise รุ่น

การตรวจสอบลายเซ็น — เอกสารอ้างอิงเชิงลึก

หน้านี้เป็นเอกสารอ้างอิงเชิงลึกสำหรับพื้นผิวฝั่งตรวจสอบ AdES ใน NextPDF Enterprise จุดเข้าใช้งานคือ NextPDF\Enterprise\Security\Validation\AdESValidationEngine โดยรองรับกระบวนการตรวจสอบที่จำลองตาม ETSI ของ NextPDF สำหรับการตรวจพื้นฐาน แบบมีเวลา แบบระยะยาว และการตรวจ timestamp แบบจัดเก็บถาวร ได้แก่ การตรวจสอบพื้นฐาน การตรวจสอบพร้อมเวลา การตรวจสอบพร้อมข้อมูลระยะยาว และการตรวจสอบสายโซ่ครอบคลุม DocTimeStamp แบบจัดเก็บถาวร ผลลัพธ์เป็นค่า ValidationReport ที่บรรจุกรณี enum MainIndication และ SubIndication พร้อมค่าสตริง URN ตาม ETSI พื้นผิวสนับสนุนที่บันทึกไว้ที่นี่ ได้แก่ SPI SignatureDataExtractor และการนำไปใช้ CmsSignatureDataExtractor, ตัวสแกนระดับไบต์ PdfSignatureDictionaryScanner, พื้นผิวการตรวจสอบเส้นทาง NextPDF\Enterprise\Security\Pki และ BatchSignatureValidator สำหรับคำแนะนำระดับกระบวนการทำงาน ดู การตรวจสอบลายเซ็น: การตรวจสอบเชิงเข้ารหัสฝั่งตรวจสอบ AdES / PAdES

ความสามารถนี้มาพร้อมกับ NextPDF Enterprise (nextpdf/enterprise) และเปิดใช้งานด้วยชุดใบอนุญาตระดับ Enterprise การนำไปใช้งานที่ไม่มีสิทธิ์นั้นจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบรุ่นและรับใบอนุญาต

สัญลักษณ์พารามิเตอร์พฤติกรรมเริ่มต้นคืนค่าโยนข้อยกเว้นหรือล้มเหลวด้วยหมายเหตุ
AdESValidationEngine::__constructพารามิเตอร์ทางเลือก 11 ตัว: ?PathValidatorInterface $chainValidator, ?SignatureDataExtractor $extractor, ClockInterface $clock, ?LoggerInterface $logger, string $defaultPolicy, NetworkPolicy $networkPolicy และตัวช่วยตรวจสอบทางเลือกอีกห้าตัวค่าเริ่มต้นทั้งหมดเป็นแบบ fail-closed: ตัวตรวจสอบเส้นทาง Pki บนนาฬิกาของเอ็นจิน ไม่มีตัวแยกข้อมูล ไม่มีคลังความเชื่อถือ TSAเอ็นจินใหม่ไม่โยนข้อยกเว้นเมื่อไม่มีคลังความเชื่อถือ การประเมินสายโซ่ TSA จะรายงานว่าไม่น่าเชื่อถือ ซึ่งจับคู่กับ INDETERMINATE ไม่ใช่การผ่านเลย
AdESValidationEngine::validateBasicstring $signedData, string $signatureการตรวจสอบพื้นฐาน: รูปแบบ, ไดเจสต์, การเข้ารหัส, อัลกอริทึมที่อ่อนแอ, สายโซ่, การเพิกถอนที่กำกับด้วยที่มาValidationReportไม่โยนข้อยกเว้น; ความล้มเหลวในการแยกข้อมูลและเส้นทางจับคู่กับรายงานแบบ fail-closedหากไม่มีตัวแยกข้อมูล จะตรวจเฉพาะการป้องกันเท่านั้น; ดูกรณีขอบ
AdESValidationEngine::validateWithTimestring $signedData, string $signature, DateTimeImmutable $claimedTimeการตรวจสอบพื้นฐานก่อน; หน้าต่างใบรับรองและการเพิกถอนถูกเทียบกับเวลาที่อ้างValidationReportไม่โยนข้อยกเว้นประตูตรวจ signature-timestamp อย่างเข้มงวดเมื่อมีแอตทริบิวต์นี้; $claimedTime ยังคงเป็นจุดยึดเวลา
AdESValidationEngine::validateWithLongTermDatastring $signedData, string $signature, array $dssData (certs/ocsps/crls)ต้องผ่านการตรวจพื้นฐาน; ประตู signature-timestamp เตรียมพร้อมด้วย TSA-at-genTime; ประตู POE, การเพิกถอน DSS และการจัดเก็บถาวรValidationReportไม่โยนข้อยกเว้นNetworkPolicy::STRICT_OFFLINE ที่มีข้อมูลฝังตัวไม่เพียงพอจะให้ผล INDETERMINATE / TRY_LATER
AdESValidationEngine::validateArchivalTimestampChainstring $pdfBytes, array $dssData = [], ?TrustAnchorStoreInterface $anchors = nullสายโซ่ครอบคลุม DocTimeStamp ที่อิงหลักฐานบนไบต์ ByteRange ที่แม่นยำValidationReportไม่โยนข้อยกเว้นเมื่อเจอไบต์ที่เป็นอันตรายTOTAL_PASSED เฉพาะสำหรับสายโซ่ที่น่าเชื่อถือและครอบคลุมถึง EOF เท่านั้น
MainIndicationenum ที่หนุนด้วยสตริง สามกรณีค่า URN ตาม ETSI; ดูรายการกรณีด้านล่าง
SubIndicationenum ที่หนุนด้วยสตริง สิบห้ากรณีค่า URN ตาม ETSI; ดูรายการกรณีด้านล่าง
ValidationReport::__constructMainIndication $mainIndication, ?SubIndication $subIndication, DiagnosticData $diagnosticData, DateTimeImmutable $validationTime, string $validationPolicy = ''ผลการตรวจสอบที่ไม่เปลี่ยนแปลง (final readonly)รายงานใหม่ไม่โยนข้อยกเว้นisPassed(), isFailed(), isIndeterminate(), toArray()
DiagnosticData::__constructarray $certificateChain, array $timestamps, array $revocationData, string $validationPolicy, string $signatureFormat, array $warnings (มีค่าเริ่มต้นทั้งหมด)ภาชนะเก็บหลักฐานที่ไม่เปลี่ยนแปลง; เป็นร่องรอยตรวจสอบเท่านั้นค่าใหม่ไม่โยนข้อยกเว้นtoArray() ทำการซีเรียลไลซ์การอ้างอิงเพื่อการรายงาน
SignatureDataExtractor::extractstring $signedData, string $signatureSPI: แจงส่วน CMS และดึงส่วนประกอบสำหรับการตรวจสอบExtractedSignatureDataSignatureExtractionException เมื่อไม่สามารถแจงส่วนลายเซ็นได้อินเทอร์เฟซ; แยกการแจงส่วน ASN.1 ออกจากเอ็นจิน
CmsSignatureDataExtractor::extractstring $signedData, string $signatureดึงข้อมูลพร้อมตรวจสอบเชิงเข้ารหัสของลายเซ็นพื้นฐาน PAdES แบบแยกส่วนExtractedSignatureDataSignatureExtractionException เฉพาะเมื่อไม่สามารถแจงส่วน CMS ได้เลยเท่านั้นความล้มเหลวของการเข้ารหัสหรือการผูกจะคืนข้อมูลโดยมี cryptoValid / hashValid เป็นเท็จ; และจะไม่โยนข้อยกเว้นสำหรับกรณีนั้น
PdfSignatureDictionaryScanner::scanstring $pdfBytesการสแกนระดับไบต์สำหรับพจนานุกรม /ByteRange + /Contents พร้อมการตรวจสอบไขว้กันปลอมแปลงแบบพอดีเป๊ะlist<PdfSignatureOccurrence>เป็นฟังก์ชันสมบูรณ์; ไม่โยนข้อยกเว้น; ตัวเลือกที่ผิดรูปจะถูกข้ามเรียงลำดับตามจุดสิ้นสุดของการครอบคลุม เร็วสุดก่อน
PathValidatorInterface::validatearray $chain, ?DateTimeImmutable $validationTime = null, array $initialPolicies = []การตรวจสอบเส้นทางตาม RFC 5280 §6.1.4 พร้อมการประมวลผลนโยบายPathValidationResultPathValidationException เมื่อสายโซ่ไม่ถูกต้องเชิงโครงสร้างหรือมีการฝ่าฝืนขีดจำกัดเชิงปฏิปักษ์สายโซ่เรียงลำดับ end-entity ก่อน และ anchor ท้ายสุด
PathValidatorInterface::validateWithAiaChasingarray $chain, ?DateTimeImmutable $validationTime = nullการแก้ปัญหาผ่าน AIA สำหรับตัวกลางที่ขาดหาย แล้วจึงตรวจสอบPathValidationResultPathValidationExceptionการดึงข้อมูลถูกจำกัดด้วยการหมดเวลาและขีดจำกัดจำนวนไบต์
CertificateChainValidatorตัวสร้าง: เอ็นจิน, PathValidationOptions, นาฬิกา, ล็อกเกอร์; static withDefaults()การนำ SPI ไปใช้พร้อมขีดจำกัดเชิงปฏิปักษ์เริ่มต้นPathValidationResult จากทั้งสองเมท็อดPathValidationExceptionถูกโยนด้วยเมื่อไม่สามารถส่งออก OpenSSLCertificate เป็น PEM ได้
PathValidationOptions::__constructขีดจำกัด (maxDepth, maxPolicyFanout, fetchTimeoutSeconds, fetchSizeCapBytes) พร้อมแฟล็กนโยบาย, ?TrustAnchorStoreInterface $trustAnchors, bool $requireTrustedAnchorความลึก 32, fanout 64, 5 s ต่อการดึง, 10 MiB ต่อการดึง; แฟล็กทั้งหมดเป็นเท็จตัวเลือกใหม่ไม่โยนข้อยกเว้นแฟกทอรี: defaults(), strict(), withTrustAnchors()
PathValidationResult::__constructbool $valid, string $trustAnchorFingerprint, DateTimeImmutable $validatedAt, array $validPolicies, ?RevocationCheckResult $revocation, bool $trustAnchorTrusted, array $fetchedCertificates, array $failureReasonsผลลัพธ์ที่ไม่เปลี่ยนแปลง; trustAnchorTrusted มีค่าเริ่มต้นเป็นเท็จ (fail-closed)ค่าใหม่ไม่โยนข้อยกเว้นการเป็นสมาชิกความเชื่อถือแยกต่างหากจากความถูกต้องเชิงโครงสร้าง
PolicyProcessorตัวสร้าง: PolicyTreeState $state, PathValidationOptions $options; processCertificate(string $certDer, int $depth, bool $selfIssued), finalizeWrapUp(), tree()การขยาย จับคู่ และสรุปต้นไม้นโยบายตาม RFC 5280 §6.1.4void / list<non-empty-string> / PolicyTreePathValidationException เมื่อการประมวลผลนโยบายล้มเหลวใดๆ (fail-closed)การสรุปคืนค่า OID นโยบายที่รอด โดยไม่รวม anyPolicy
PolicyTreeattach(PolicyTreeNode $node, PathValidationOptions $options), enforceFanout(...), remove(...) พร้อมการสอบถามแบบอ่านสถานะ valid_policy_tree พร้อมดัชนีความลึกแตกต่างกันไปตามเมท็อดPathValidationException เมื่อจำนวนใบที่ยังคงอยู่เกินขีดจำกัด fanoutเปิดเผย ANY_POLICY_OID (2.5.29.32.0)
NameConstraintsChecker::processCertificatestring $certDer, bool $applyNameCheckสะสมและบังคับใช้ซับทรีที่อนุญาต / ที่ถูกกันออกตาม RFC 5280 §6.1.4(g)voidPathValidationException เมื่อมีการละเมิดซับทรี รูปแบบ GeneralName ที่ไม่รองรับในข้อจำกัด หรือการฝ่าฝืนขีดจำกัดชื่อที่เทียบกันไม่ได้จะถูกจัดการแบบ fail-closed
TrustAnchorStoreInterface::containsFingerprintstring $anchorDerSha256Hexการเป็นสมาชิกโดยใช้ SHA-256 แบบเลขฐานสิบหกตัวพิมพ์เล็กบนใบรับรอง DER ของจุดยึดboolไม่โยนข้อยกเว้นจุดเชื่อมความเชื่อถือที่ตัวตรวจสอบเส้นทางใช้อ้างอิง
BatchSignatureValidator::validatearray $inputs (list<DocumentSignatureInput>)การตรวจสอบลายเซ็นหลายเอกสารพร้อมการแคชการเพิกถอนต่อชุดBatchValidationReportInvalidArgumentException เมื่อรายการว่างเปล่า; ตัวป้องกันทรัพยากรปฏิเสธชุดที่มีเอกสารเกิน 1000 ฉบับอยู่ใน NextPDF\Enterprise\Signature
final class AdESValidationEngine
public function validateBasic(string $signedData, string $signature): ValidationReport
public function validateWithTime(
string $signedData,
string $signature,
DateTimeImmutable $claimedTime,
): ValidationReport
public function validateWithLongTermData(
string $signedData,
string $signature,
array $dssData,
): ValidationReport
public function validateArchivalTimestampChain(
string $pdfBytes,
array $dssData = [],
?TrustAnchorStoreInterface $anchors = null,
): ValidationReport
public function validate(
array $chain,
?DateTimeImmutable $validationTime = null,
array $initialPolicies = [],
): PathValidationResult;
public function validateWithAiaChasing(
array $chain,
?DateTimeImmutable $validationTime = null,
): PathValidationResult;
public static function withDefaults(
?ClockInterface $clock = null,
?AiaChaser $aiaChaser = null,
?LoggerInterface $logger = null,
): self
public function containsFingerprint(string $anchorDerSha256Hex): bool;
public function extract(string $signedData, string $signature): ExtractedSignatureData;
public function scan(string $pdfBytes): array
public function validate(array $inputs): BatchValidationReport

enum ตัวบ่งชี้ กรณีของ MainIndication: TOTAL_PASSED, TOTAL_FAILED, INDETERMINATE ค่าที่หนุนอยู่เป็นไปตามรูปแบบ urn:etsi:019102:mainindication:total-passed (ตัวพิมพ์เล็ก ใช้ยัติภังค์) กรณีของ SubIndication: HASH_FAILURE, SIG_CRYPTO_FAILURE, REVOKED, EXPIRED, NOT_YET_VALID, NO_POE, TRY_LATER, CERTIFICATE_CHAIN_GENERAL_FAILURE, FORMAT_FAILURE, REVOKED_CA_NO_POE, CRYPTO_CONSTRAINTS_FAILURE, POLICY_PROCESSING_FAILURE, REVOCATION_OUT_OF_BOUNDS_NO_POE, NO_SIGNING_CERTIFICATE_FOUND, TIMESTAMP_ORDER_FAILURE แต่ละกรณีหนุนด้วย urn:etsi:019102:subindication:<CASE_NAME> โดยใช้ชื่อกรณีที่ตรงเป๊ะ

  • รับเป็นรายงาน คืนเป็นรายงาน จุดเข้าใช้งานทั้งสี่ของเอ็นจินจะคืนค่า ValidationReport สำหรับอินพุตที่เป็นอันตรายแทนการโยนข้อยกเว้น SignatureExtractionException ที่ถูกจับจะถูกส่งไปยังเส้นทางป้องกัน; PathValidationException ที่ถูกจับจะจับคู่กับ TOTAL_FAILED / CERTIFICATE_CHAIN_GENERAL_FAILURE
  • ลำดับการตรวจสอบพื้นฐาน ตรวจรูปแบบก่อน; โครงสร้างที่แจงส่วนไม่ได้คือ TOTAL_FAILED / FORMAT_FAILURE (EN 319 102-1 §5.3.4) จากนั้นไดเจสต์ (HASH_FAILURE) และการตรวจสอบเชิงเข้ารหัส (SIG_CRYPTO_FAILURE) ซึ่งสอดคล้องกับผลลัพธ์ของบล็อกส่วนประกอบใน EN 319 102-1 §5.2.7.4 ไดเจสต์ถูกคำนวณใหม่โดยตัวตรวจสอบและเทียบกับแอตทริบิวต์ที่ลงนาม messageDigest (RFC 5652 §5.6); ไดเจสต์ที่ผู้ผลิตจัดหามาจะไม่ถูกเชื่อถือเลย
  • อัลกอริทึมที่อ่อนแอถูกลดระดับ ลายเซ็นที่ตรวจสอบผ่านภายใต้ SHA-1 หรือมีการผูกใบรับรองการลงนามที่อ่อนแอ จะคืนค่า INDETERMINATE / CRYPTO_CONSTRAINTS_FAILURE ไม่ใช่ TOTAL_PASSED เลย เส้นทางแบบมีเวลายืนยันสิ่งนี้ซ้ำ เพื่อไม่ให้ลายเซ็นที่อ่อนแอถูกฟอกให้กลายเป็นการผ่านแบบมีเวลาที่ถูกต้อง
  • ประตูที่มาของการเพิกถอน แฟล็กการเพิกถอนของตัวแยกข้อมูลจะถูกอ้างอิงเฉพาะเมื่อตัวแยกข้อมูลได้ทำการตรวจการเพิกถอนจริง (revocationChecked เป็นจริง) ค่าเริ่มต้นที่ยังไม่ตรวจไม่ใช่ทั้ง “ยืนยันแล้วว่าไม่ถูกเพิกถอน” และไม่ใช่ตัวกระตุ้น REVOKED หลักฐานการเพิกถอนถูกสร้างขึ้นโดยเส้นทาง DSS
  • การส่งต่อผลที่ไม่ผ่าน เส้นทางแบบมีเวลาและแบบระยะยาวจะไม่ยกระดับผลพื้นฐานที่ไม่ผ่านเลย มีข้อยกเว้นหนึ่งกรณี: ผลพื้นฐาน INDETERMINATE / REVOKED จะถูกแก้ไขเทียบกับ $claimedTime; การเพิกถอน ณ เวลาที่อ้างหรือก่อนหน้านั้นคือ TOTAL_FAILED / REVOKED สิ่งนี้สะท้อนรูปแบบใน EN 319 102-1 §5.3.4 ที่แก้ผลไม่ชี้ขาดเกี่ยวกับการเพิกถอนด้วยหลักฐานเวลา เมื่อไม่สามารถทำการเปรียบเทียบได้ รายงานพื้นฐานที่ยังแก้ไม่ได้จะถูกส่งต่อตามเดิมทุกประการ
  • การผูก signature-timestamp อย่างเข้มงวด (fail-closed; BC break) เมื่อ CMS มีแอตทริบิวต์ที่ไม่ได้ลงนาม id-aa-timeStampToken การมีอยู่ของมันจะกระตุ้นการบังคับใช้ทั้งในเส้นทางแบบมีเวลาและแบบระยะยาว; ไม่มีโหมดเตือนอย่างเดียว จำนวนสมาชิกต้องเป็นแอตทริบิวต์เดียวที่มีค่าเดียวเป๊ะ (EN 319 122-1 §5.3); รูปแบบอื่นใดคือ TOTAL_FAILED / FORMAT_FAILURE โทเคนต้องตรวจสอบผ่านเชิงเข้ารหัสตั้งแต่ต้นจนจบ; โทเคนที่ตรวจสอบไม่ได้ ความขัดแย้งจากความต่างของตัวแจงส่วน หรือ imprint ที่ไม่ตรงกันคือ INDETERMINATE / TIMESTAMP_ORDER_FAILURE อัลกอริทึม imprint ที่ไม่รองรับหรือเป็น SHA-1 คือ INDETERMINATE / CRYPTO_CONSTRAINTS_FAILURE กฎการผูกคือ RFC 3161 Appendix A: messageImprint ของโทเคนต้องเท่ากับแฮชของออกเท็ตค่า signature ใน SignerInfo โดยเปรียบเทียบในเวลาคงที่
  • ประตูเส้นทางแบบระยะยาว ในเส้นทางที่กำกับด้วยข้อ 5.4 signature timestamp ที่ผูกไว้จะได้รับการประเมินใบรับรอง TSA เพิ่มเติม ณ genTime ของโทเคน; จุดยึดที่ไม่น่าเชื่อถือคือ INDETERMINATE / CERTIFICATE_CHAIN_GENERAL_FAILURE ไม่ใช่การผ่านเลย NetworkPolicy::STRICT_OFFLINE ที่มีวัสดุ DSS ฝังตัวไม่เพียงพอจะคืนค่า INDETERMINATE / TRY_LATER ผลของ proof-of-existence การเพิกถอน DSS และสายโซ่จัดเก็บถาวรแต่ละอย่างจะลัดวงจรไปยัง INDETERMINATE พร้อม sub-indication ที่จับคู่ไว้
  • ประตูสายโซ่จัดเก็บถาวร การไม่มี DocTimeStamp คือ INDETERMINATE / NO_POE ByteRange ที่ไม่สอดคล้องเชิงโครงสร้างคือ TOTAL_FAILED / FORMAT_FAILURE โทเคนแต่ละตัวต้องตรวจสอบผ่าน ผูก imprint กับไบต์ที่ครอบคลุมโดย ByteRange อย่างแม่นยำ และผ่านการจับคู่แง่มุม TSA-at-genTime (EXPIRED, NOT_YET_VALID, REVOKED_CA_NO_POE, CERTIFICATE_CHAIN_GENERAL_FAILURE หรือ TRY_LATER ภายใต้ strict-offline) มีการบังคับลำดับ: genTime ไม่ลดลง การครอบคลุมก้าวหน้าอย่างเคร่งครัด และโทเคนที่ตามมาต้องบรรจุช่องว่าง /Contents ของโทเคนก่อนหน้า โทเคนล่าสุดต้องครอบคลุมไบต์สุดท้าย; ไบต์ที่ตามหลังคือ TIMESTAMP_ORDER_FAILURE genTime ที่ล้ำหน้านาฬิกาตัวตรวจสอบเกิน 300 วินาทีคือ TIMESTAMP_ORDER_FAILURE
  • การวินิจฉัยไม่เคยตัดสิน รายการ proof-of-existence ใน DiagnosticData::$timestamps เป็นเพียงร่องรอยตรวจสอบเท่านั้น มันไม่เคยเปลี่ยนตัวบ่งชี้ และตัวสะสมจะรีเซ็ตทุกจุดเข้าใช้งาน
  • ขีดจำกัด Pki มาก่อนการเข้ารหัส ขีดจำกัดของ PathValidationOptions (ความลึก 32, policy fanout 64, 5 s และ 10 MiB ต่อการดึง) ถูกตรวจก่อนงานที่มีต้นทุนสูง PathValidationResult::$trustAnchorTrusted แยกต่างหากจาก $valid; requireTrustedAnchor ทำให้ปลายทางที่ไม่ได้รับการยืนยันเป็นโมฆะ strict() เปิดใช้ requireExplicitPolicy การขนส่งการเพิกถอนแบบล้มเหลวเด็ดขาด และ requireTrustedAnchor ความถูกต้องของเส้นทางสัมพันธ์กับจุดยึดตาม RFC 5280 §6.1: เส้นทางที่ถูกต้องเริ่มต้นที่จุดยึดความเชื่อถือที่จัดหาเป็นอินพุต
  • พื้นผิวแบบชุด BatchSignatureValidator::validate() โยน InvalidArgumentException สำหรับรายการว่างเปล่า และปฏิเสธชุดที่มีเอกสารเกิน 1000 ฉบับผ่านตัวป้องกันทรัพยากร PHP เป็นเจ้าของการตรวจสอบเชิงเข้ารหัสทั้งหมดในไปป์ไลน์นั้น
  • เอ็นจินเริ่มต้นไม่มีตัวแยกข้อมูล new AdESValidationEngine() ทำเพียงการตรวจป้องกันเท่านั้น: ลายเซ็นหรือข้อมูลที่ลงนามว่างเปล่าคือ TOTAL_FAILED; คู่ที่ไม่ว่างเปล่าใดๆ จะได้ผลเป็น INDETERMINATE / NO_SIGNING_CERTIFICATE_FOUND ไม่ใช่ TOTAL_PASSED เลย ให้ฉีด NextPDF\Enterprise\Security\Validation\CmsSignatureDataExtractor เพื่อให้ได้การตรวจสอบเชิงเข้ารหัส
  • การตรวจความเชื่อถือ TSA เริ่มต้นไม่มีคลัง สายโซ่ TSA ทุกอันจะรายงานว่าไม่น่าเชื่อถือ ดังนั้นผลของ signature-timestamp แบบจัดเก็บถาวรและแบบระยะยาวจะยังคงเป็น INDETERMINATE ให้จัดหาจุดยึดผ่าน validateArchivalTimestampChain(..., $anchors) หรือ TsaCertificateAtGenTimeCheck ที่กำหนดค่าไว้
  • $pdfBytes ว่างเปล่า validateArchivalTimestampChain('') คืนค่า TOTAL_FAILED / FORMAT_FAILURE
  • signature timestamp ก่อนการแก้ไขไม่สามารถผ่านได้ โทเคนที่สร้างโดย NextPDF เวอร์ชันก่อนการแก้ไข strict-binding ได้ทำ imprint จากอินพุตที่ต่างออกไป โทเคนเหล่านั้นจะล้มเหลวการผูกตาม Appendix A อย่างถาวร; ให้ลงนามใหม่และประทับเวลาใหม่เพื่อคืนผลลัพธ์เชิงบวก นี่คือ BC break ที่จงใจและมีบันทึกไว้
  • DocTimeStamp ที่ซ้ำหรือทับซ้อน ตัวซ้ำในรุ่นแก้ไขเดียวกัน การครอบคลุมที่เท่ากันหรือทับซ้อน หรือโทเคนที่ตามมาซึ่งไม่บรรจุช่องว่างลายเซ็นของโทเคนก่อนหน้า จะล้มเหลวประตูการจัดลำดับ
  • ตัวสแกนเป็นแบบสมบูรณ์และระดับไบต์ scan() ข้ามตัวเลือกที่ผิดรูปหรือถูกปลอมแปลงอย่างเงียบๆ; /ByteRange ลวงภายในสตรีมเนื้อหาจะถูกปฏิเสธ มันไม่แก้ไขวัตถุทางอ้อมหรือเดินตารางอ้างอิงไขว้
  • การครอบคลุม ไม่ใช่การเข้าถึง validateArchivalTimestampChain() พิสูจน์การครอบคลุมช่วงไบต์เชิงเข้ารหัสถึงจุดสิ้นสุดไฟล์ การวิเคราะห์การเข้าถึงระดับวัตถุ (ตัวอย่างเช่น รากเอกสารที่ถูกชี้ใหม่ภายในรุ่นแก้ไขที่ครอบคลุม) ถูกประกาศให้อยู่นอกขอบเขต
  • การใช้ Pki โดยตรงจะโยนข้อยกเว้น การเรียกการนำ PathValidatorInterface ไปใช้โดยตรงจะเปิดเผย PathValidationException สำหรับสายโซ่ที่ไม่ถูกต้องเชิงโครงสร้าง ขีดจำกัดที่ถูกฝ่าฝืน รูปแบบข้อจำกัดที่ไม่รองรับ และการส่งออก PEM ของแฮนเดิล OpenSSLCertificate ที่ล้มเหลว เอ็นจินจับคลาสนี้; ตัวเรียกของคุณเองต้องจัดการมัน

ฝั่งตรวจสอบยอมรับ RSA PKCS#1 v1.5 ที่ใช้ SHA-2 และ ECDSA บน P-256/P-384/P-521 โทเคน RSASSA-PSS, EdDSA และ SHA-3 จะล้มเหลวแบบปิดเนื่องจากไม่รองรับ; SHA-1 ถูกลดระดับเป็น CRYPTO_CONSTRAINTS_FAILURE ภายใต้โปรไฟล์นโยบายการเข้ารหัส Enterprise FIPS 140-3 (มีบันทึกไว้ในโมดูลความปลอดภัย) ข้อจำกัดนี้ใช้กับว่าอัลกอริทึมใดถูกยอมรับ; ตัวกระบวนการตรวจสอบเอง — การคำนวณไดเจสต์ใหม่ การตรวจลายเซ็น การผูก การตรวจสอบเส้นทาง — ไม่เปลี่ยนแปลง NextPDF ไม่ถือใบรับรอง FIPS 140-3 และหน้านี้ไม่กล่าวอ้างใดๆ

ข้อกล่าวอ้างมาตรฐานข้อ
การตรวจสอบ Basic Signature เป็นบล็อกส่วนประกอบที่นำกลับมาใช้ซ้ำได้สำหรับการตรวจสอบ time-stamp และแบบมีเวลาETSI EN 319 102-1§5.3.1
ความล้มเหลวด้านความสมบูรณ์จับคู่กับ HASH_FAILURE; การตรวจลายเซ็นที่ล้มเหลวจับคู่กับ SIG_CRYPTO_FAILUREETSI EN 319 102-1§5.2.7.4
การตรวจรูปแบบทำงานก่อนและผลที่ไม่ผ่านจะหยุดกระบวนการETSI EN 319 102-1§5.3.4
ผลไม่ชี้ขาดเกี่ยวกับการเพิกถอนสามารถแก้ไขได้ด้วยหลักฐานเวลาETSI EN 319 102-1§5.3.4
เส้นทางการรับรองที่ถูกต้องเริ่มต้นที่จุดยึดความเชื่อถือที่จัดหาเป็นอินพุตRFC 5280§6.1
ตัวตรวจสอบคำนวณไดเจสต์เนื้อหาใหม่; มันต้องเท่ากับแอตทริบิวต์ที่ลงนาม messageDigestRFC 5652§5.6
messageImprint ของ signature timestamp ทำแฮชค่าฟิลด์ signature ใน SignerInfoRFC 3161Appendix A
แอตทริบิวต์ signature-time-stamp บรรจุ AttributeValue เพียงหนึ่งเดียวเป๊ะETSI EN 319 122-1§5.3

ทุกข้อเป็นการถอดความ; NextPDF ไม่ได้ทำซ้ำข้อความเชิงบรรทัดฐาน NextPDF ไม่ได้กล่าวอ้างความสอดคล้องหรือการรับรอง AdES / PAdES ใดๆ การรองรับมาตรฐานไม่ใช่ความสอดคล้องกับมาตรฐานนั้น และความสอดคล้องก็ไม่ใช่การรับรอง — NextPDF ไม่ถือการรับรองใดและไม่มอบให้ใคร เอ็นจินนำกระบวนการตรวจสอบที่อ้างถึงไปใช้เป็นความสามารถ; มันไม่ใช่บริการตรวจสอบที่มีคุณสมบัติหรือได้รับการรับรอง และรายงาน TOTAL_PASSED เป็นข้อความเชิงเข้ารหัส ไม่ใช่การตัดสินทางกฎหมาย ค่า enum นำรูปแบบตัวระบุ ETSI URN กลับมาใช้ซ้ำเพื่อความสามารถทำงานร่วมกันของข้อมูลรายงาน; การนำกลับมาใช้ซ้ำนั้นไม่ได้ยืนยันการรับรองใดๆ

  • การจับคู่ป้ายข้อ ซอร์สของแพ็กเกจกำกับจุดเข้าใช้งานเป็นข้อ 5.2, 5.3 และ 5.4 ของ EN 319 102-1 คลังข้อมูลความสอดคล้องจัดวางกระบวนการตรวจสอบ Basic Signature เองไว้ที่ข้อ 5.3 โดยมีบล็อกส่วนประกอบเชิงเข้ารหัสที่ 5.2.7.4 หน้านี้อ้างเลขข้อที่สืบค้นมา; สัญญาว่าด้วยพฤติกรรม ไม่ใช่ป้าย คือสิ่งที่มีอำนาจ
  • การทดสอบเชิงกำหนดแน่นอน การเปรียบเทียบเวลาทุกครั้งไหลผ่าน ClockInterface ตาม PSR-20 ที่ถูกฉีดเข้ามา ให้ฉีดนาฬิกาที่ถูกตรึงเพื่อทดสอบการตรวจหน้าต่าง ขอบเขตความคลาดเคลื่อน genTime 300 วินาที และการตัดสินความสดของ CRL
  • การประกอบ ตัวช่วยทั้งหมดของเอ็นจินถูกฉีดผ่านตัวสร้างและเป็นทางเลือก โดยมีค่าเริ่มต้นแบบ fail-closed ตัวตรวจสอบเส้นทางเริ่มต้นคือ CertificateChainValidator::withDefaults() บนนาฬิกาของเอ็นจิน; ตัวเลือกเริ่มต้นทำให้การประมวลผลนโยบายและข้อจำกัดชื่อไม่ทำงานสำหรับอินพุตที่สอดคล้องและไม่มีข้อจำกัด
  • เนมสเปซ พื้นผิวเอ็นจินอยู่ใน NextPDF\Enterprise\Security\Validation พื้นผิวการตรวจสอบเส้นทางอยู่ใน NextPDF\Enterprise\Security\Pki และตัวจัดการแบบชุดอยู่ใน NextPDF\Enterprise\Signature
  • สุขอนามัยของรายงาน รายงานไม่เปลี่ยนแปลงและซีเรียลไลซ์ได้ผ่าน toArray() บริบทการวินิจฉัยรีเซ็ตที่ทุกจุดเข้าใช้งาน ดังนั้นรายงานจะไม่พาหลักฐานจากการรันก่อนหน้าบนอินสแตนซ์เอ็นจินเดียวกัน

หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว API สาธารณะที่รองรับเท่านั้น เส้นทางเนมสเปซภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้าตั๋วอยู่นอกขอบเขต