Bỏ qua để đến nội dung
getnextpdf.com

Enterprise phiên bản

Xác minh chữ ký — Tài liệu tham chiếu chuyên sâu

Trang này là tham chiếu chuyên sâu cho bề mặt phía xác minh AdES trong NextPDF Enterprise. Điểm vào là NextPDF\Enterprise\Security\Validation\AdESValidationEngine. Nó triển khai các luồng xác thực mô hình hóa theo ETSI của NextPDF cho các phép kiểm tra cơ bản, có thời gian, dài hạn, và dấu thời gian lưu trữ: xác thực cơ bản, xác thực có thời gian, xác thực với dữ liệu dài hạn, và xác thực chuỗi bao phủ DocTimeStamp lưu trữ. Kết quả là các giá trị ValidationReport mang theo các case enum MainIndicationSubIndication với các giá trị chuỗi ETSI URN. Các bề mặt hỗ trợ được ghi lại ở đây: SPI SignatureDataExtractor và bản triển khai CmsSignatureDataExtractor của nó, trình quét cấp byte PdfSignatureDictionaryScanner, bề mặt xác thực đường dẫn NextPDF\Enterprise\Security\Pki, và BatchSignatureValidator. Để có hướng dẫn ở cấp quy trình, xem Xác minh chữ ký: phía xác minh mật mã AdES / PAdES.

Năng lực này được cung cấp trong NextPDF Enterprise (nextpdf/enterprise) và kích hoạt bằng một gói giấy phép cấp Enterprise. Một triển khai không có quyền đó sẽ không nạp các lớp của năng lực này. So sánh các phiên bản và nhận giấy phép.

Ký hiệuTham sốHành vi mặc địnhTrả vềNém hoặc thất bại vớiGhi chú
AdESValidationEngine::__construct11 tham số tùy chọn: ?PathValidatorInterface $chainValidator, ?SignatureDataExtractor $extractor, ClockInterface $clock, ?LoggerInterface $logger, string $defaultPolicy, NetworkPolicy $networkPolicy, và năm cộng tác viên verifier tùy chọnTất cả mặc định đều fail-closed: trình xác thực đường dẫn Pki trên đồng hồ của engine, không có extractor, không có kho tin cậy TSAEngine mớiKhông némKhông có kho tin cậy, đánh giá chuỗi TSA báo cáo là không được tin cậy; điều đó ánh xạ tới INDETERMINATE, không bao giờ là kết quả đạt
AdESValidationEngine::validateBasicstring $signedData, string $signatureXác thực cơ bản: định dạng, digest, mật mã, thuật toán yếu, chuỗi, thu hồi có kiểm soát theo xuất xứValidationReportKhông ném; các thất bại trích xuất và đường dẫn ánh xạ tới các báo cáo fail-closedKhông có extractor, chỉ kiểm tra bảo vệ; xem các trường hợp biên
AdESValidationEngine::validateWithTimestring $signedData, string $signature, DateTimeImmutable $claimedTimeXác thực cơ bản trước; cửa sổ chứng chỉ và thu hồi được so sánh với thời gian đã tuyên bốValidationReportKhông némCổng dấu thời gian chữ ký nghiêm ngặt khi thuộc tính hiện diện; $claimedTime vẫn là mốc thời gian
AdESValidationEngine::validateWithLongTermDatastring $signedData, string $signature, array $dssData (certs/ocsps/crls)Yêu cầu đạt cơ bản; cổng dấu thời gian chữ ký được kích hoạt với TSA-tại-genTime; các cổng POE, thu hồi DSS, và lưu trữValidationReportKhông némNetworkPolicy::STRICT_OFFLINE với dữ liệu nhúng không đủ tạo ra INDETERMINATE / TRY_LATER
AdESValidationEngine::validateArchivalTimestampChainstring $pdfBytes, array $dssData = [], ?TrustAnchorStoreInterface $anchors = nullChuỗi bao phủ DocTimeStamp dựa trên bằng chứng trên chính xác các byte ByteRangeValidationReportKhông ném với byte thù địchTOTAL_PASSED chỉ dành cho một chuỗi được tin cậy, bao phủ tới EOF
MainIndicationEnum dựa trên chuỗi, ba caseCác giá trị ETSI URN; xem danh sách case bên dưới
SubIndicationEnum dựa trên chuỗi, mười lăm caseCác giá trị ETSI URN; xem danh sách case bên dưới
ValidationReport::__constructMainIndication $mainIndication, ?SubIndication $subIndication, DiagnosticData $diagnosticData, DateTimeImmutable $validationTime, string $validationPolicy = ''Kết quả xác thực bất biến (final readonly)Báo cáo mớiKhông némisPassed(), isFailed(), isIndeterminate(), toArray()
DiagnosticData::__constructarray $certificateChain, array $timestamps, array $revocationData, string $validationPolicy, string $signatureFormat, array $warnings (tất cả đều có mặc định)Vùng chứa bằng chứng bất biến; chỉ để lưu vết kiểm toánGiá trị mớiKhông némtoArray() tuần tự hóa các tham chiếu để báo cáo
SignatureDataExtractor::extractstring $signedData, string $signatureSPI: phân tích CMS và trích xuất các thành phần xác thựcExtractedSignatureDataSignatureExtractionException khi không thể phân tích chữ kýInterface; tách rời việc phân tích ASN.1 khỏi engine
CmsSignatureDataExtractor::extractstring $signedData, string $signatureTrích xuất cộng với xác minh bằng mật mã một chữ ký cơ bản PAdES tách rờiExtractedSignatureDataSignatureExtractionException chỉ khi hoàn toàn không thể phân tích CMSMột thất bại về mật mã hoặc ràng buộc trả về dữ liệu với cryptoValid / hashValid là false; nó không bao giờ ném vì điều đó
PdfSignatureDictionaryScanner::scanstring $pdfBytesQuét cấp byte tìm các từ điển /ByteRange + /Contents với các kiểm tra chéo chống giả mạo khớp chính xáclist<PdfSignatureOccurrence>Toàn phần; không bao giờ ném; các ứng viên dị dạng bị bỏ quaĐược sắp xếp theo điểm kết thúc bao phủ, sớm nhất trước
PathValidatorInterface::validatearray $chain, ?DateTimeImmutable $validationTime = null, array $initialPolicies = []Xác thực đường dẫn RFC 5280 §6.1.4 với xử lý chính sáchPathValidationResultPathValidationException khi chuỗi không hợp lệ về mặt cấu trúc hoặc khi vượt qua một giới hạn đối khángChuỗi có thực thể-cuối trước, neo cuối cùng
PathValidatorInterface::validateWithAiaChasingarray $chain, ?DateTimeImmutable $validationTime = nullGiải quyết AIA cho các trung gian bị thiếu, rồi xác thựcPathValidationResultPathValidationExceptionViệc tải được giới hạn bởi thời gian chờ và giới hạn byte
CertificateChainValidatorConstructor: engine, PathValidationOptions, clock, logger; static withDefaults()Bản triển khai SPI với các mức trần đối kháng mặc địnhPathValidationResult từ cả hai phương thứcPathValidationExceptionCũng được ném khi không thể xuất một OpenSSLCertificate sang PEM
PathValidationOptions::__constructCác mức trần (maxDepth, maxPolicyFanout, fetchTimeoutSeconds, fetchSizeCapBytes) cộng với các cờ chính sách, ?TrustAnchorStoreInterface $trustAnchors, bool $requireTrustedAnchorĐộ sâu 32, fanout 64, 5 s mỗi lần tải, 10 MiB mỗi lần tải; tất cả các cờ đều falseTùy chọn mớiKhông némCác factory: defaults(), strict(), withTrustAnchors()
PathValidationResult::__constructbool $valid, string $trustAnchorFingerprint, DateTimeImmutable $validatedAt, array $validPolicies, ?RevocationCheckResult $revocation, bool $trustAnchorTrusted, array $fetchedCertificates, array $failureReasonsKết quả bất biến; trustAnchorTrusted mặc định là false (fail-closed)Giá trị mớiKhông némTư cách thành viên tin cậy khác biệt với tính hợp lệ về cấu trúc
PolicyProcessorConstructor: PolicyTreeState $state, PathValidationOptions $options; processCertificate(string $certDer, int $depth, bool $selfIssued), finalizeWrapUp(), tree()Mở rộng, ánh xạ, và kết thúc cây chính sách RFC 5280 §6.1.4void / list<non-empty-string> / PolicyTreePathValidationException với bất kỳ thất bại xử lý chính sách nào (fail-closed)Kết thúc trả về các OID chính sách còn sống sót, loại trừ anyPolicy
PolicyTreeattach(PolicyTreeNode $node, PathValidationOptions $options), enforceFanout(...), remove(...), cộng với các truy vấn đọcTrạng thái valid_policy_tree với một chỉ mục độ sâuThay đổi theo từng phương thứcPathValidationException khi số lượng lá còn sống vượt quá mức trần fanoutPhơi bày ANY_POLICY_OID (2.5.29.32.0)
NameConstraintsChecker::processCertificatestring $certDer, bool $applyNameCheckTích lũy và thực thi các cây con được phép / bị loại trừ theo RFC 5280 §6.1.4(g)voidPathValidationException khi một cây con bị vi phạm, một dạng GeneralName không được hỗ trợ trong một ràng buộc, hoặc một mức trần bị vượt quaCác tên không thể so sánh được xử lý fail-closed
TrustAnchorStoreInterface::containsFingerprintstring $anchorDerSha256HexTư cách thành viên theo SHA-256 hex chữ thường trên chứng chỉ DER của neoboolKhông némĐường ghép tin cậy được trình xác thực đường dẫn tham vấn
BatchSignatureValidator::validatearray $inputs (list<DocumentSignatureInput>)Xác thực chữ ký nhiều tài liệu với bộ nhớ đệm thu hồi theo từng lôBatchValidationReportInvalidArgumentException với danh sách rỗng; một bộ bảo vệ tài nguyên từ chối các lô trên 1000 tài liệuNằm trong 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

Các enum chỉ thị. Các case MainIndication: TOTAL_PASSED, TOTAL_FAILED, INDETERMINATE. Các giá trị nền tuân theo mẫu urn:etsi:019102:mainindication:total-passed (chữ thường, có dấu gạch nối). Các case 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. Mỗi case được nền bởi urn:etsi:019102:subindication:<CASE_NAME> với đúng tên case.

  • Báo cáo vào, báo cáo ra. Bốn điểm vào của engine trả về một ValidationReport cho đầu vào thù địch thay vì ném. Một SignatureExtractionException bị bắt sẽ định tuyến tới đường dẫn bảo vệ; một PathValidationException bị bắt ánh xạ tới TOTAL_FAILED / CERTIFICATE_CHAIN_GENERAL_FAILURE.
  • Thứ tự xác thực cơ bản. Kiểm tra định dạng trước; một cấu trúc không thể phân tích là TOTAL_FAILED / FORMAT_FAILURE (EN 319 102-1 §5.3.4). Sau đó là digest (HASH_FAILURE) và xác minh mật mã (SIG_CRYPTO_FAILURE), khớp với các kết quả khối xây dựng của EN 319 102-1 §5.2.7.4. Digest được trình xác minh tính lại và so sánh với thuộc tính đã ký messageDigest (RFC 5652 §5.6); các digest do nhà sản xuất cung cấp không bao giờ được tin cậy.
  • Các thuật toán yếu bị hạ cấp. Một chữ ký xác minh được dưới SHA-1, hoặc với một ràng buộc chứng chỉ ký yếu, trả về INDETERMINATE / CRYPTO_CONSTRAINTS_FAILURE, không bao giờ là TOTAL_PASSED. Đường dẫn thời gian tái khẳng định điều này để một chữ ký yếu không bao giờ được rửa thành một kết quả đạt hợp lệ về thời gian.
  • Cổng xuất xứ thu hồi. Các cờ thu hồi của extractor chỉ được tham vấn khi extractor thực sự đã thực hiện một kiểm tra thu hồi (revocationChecked là true). Một giá trị mặc định chưa được kiểm tra không phải là “đã xác minh là chưa bị thu hồi” cũng không phải là một tác nhân kích hoạt REVOKED. Bằng chứng thu hồi được thiết lập bởi đường dẫn DSS.
  • Lan truyền kết quả không-đạt. Các đường dẫn thời gian và dài hạn không bao giờ nâng cấp một kết quả cơ bản không-đạt. Có một ngoại lệ: một INDETERMINATE / REVOKED cơ bản được giải quyết dựa trên $claimedTime; thu hồi tại hoặc trước thời gian đã tuyên bố là TOTAL_FAILED / REVOKED. Điều này phản ánh mẫu của EN 319 102-1 §5.3.4 về việc giải quyết một trạng thái bất định liên quan đến thu hồi bằng bằng chứng thời gian. Khi không thể thực hiện phép so sánh, báo cáo cơ bản chưa được giải quyết được lan truyền nguyên văn.
  • Ràng buộc dấu thời gian chữ ký nghiêm ngặt (fail-closed; phá vỡ BC). Khi CMS mang một thuộc tính chưa ký id-aa-timeStampToken, sự hiện diện của nó kích hoạt việc thực thi trong cả đường dẫn thời gian và dài hạn; không có chế độ chỉ-cảnh-báo. Số lượng phải chính xác là một thuộc tính với chính xác một giá trị (EN 319 122-1 §5.3); bất kỳ hình dạng nào khác là TOTAL_FAILED / FORMAT_FAILURE. Token phải xác minh được bằng mật mã từ đầu đến cuối; một token không thể xác minh, một xung đột phân tích khác biệt, hoặc một sự không khớp imprint là INDETERMINATE / TIMESTAMP_ORDER_FAILURE. Một thuật toán imprint không được hỗ trợ hoặc SHA-1 là INDETERMINATE / CRYPTO_CONSTRAINTS_FAILURE. Quy tắc ràng buộc là RFC 3161 Appendix A: messageImprint của token phải bằng với hash của các octet giá trị signature của SignerInfo, được so sánh trong thời gian không đổi.
  • Các cổng đường dẫn dài hạn. Trong đường dẫn được chú thích theo điều khoản 5.4, dấu thời gian chữ ký đã ràng buộc còn nhận thêm đánh giá chứng chỉ TSA tại genTime của token; một neo không được tin cậy là INDETERMINATE / CERTIFICATE_CHAIN_GENERAL_FAILURE, không bao giờ là kết quả đạt. NetworkPolicy::STRICT_OFFLINE với tài liệu DSS nhúng không đủ trả về INDETERMINATE / TRY_LATER. Các phát hiện về bằng chứng-tồn-tại, thu hồi DSS, và chuỗi lưu trữ mỗi cái đều ngắn mạch tới INDETERMINATE với một sub-indication được ánh xạ.
  • Các cổng chuỗi lưu trữ. Không có DocTimeStamp nào hiện diện là INDETERMINATE / NO_POE. Một ByteRange không tuân thủ về cấu trúc là TOTAL_FAILED / FORMAT_FAILURE. Mỗi token phải xác minh được, ràng buộc imprint của nó với chính xác các byte được ByteRange bao phủ, và vượt qua ánh xạ khía cạnh TSA-tại-genTime (EXPIRED, NOT_YET_VALID, REVOKED_CA_NO_POE, CERTIFICATE_CHAIN_GENERAL_FAILURE, hoặc TRY_LATER dưới chế độ strict-offline). Thứ tự được thực thi: genTime không giảm, độ bao phủ tiến triển nghiêm ngặt, và các token sau chứa lỗ hổng /Contents của token trước. Token mới nhất phải bao phủ byte cuối cùng; các byte đuôi là TIMESTAMP_ORDER_FAILURE. Một genTime vượt hơn 300 giây so với đồng hồ của trình xác minh là TIMESTAMP_ORDER_FAILURE.
  • Chẩn đoán không bao giờ quyết định. Các mục bằng chứng-tồn-tại DiagnosticData::$timestamps chỉ để lưu vết kiểm toán. Chúng không bao giờ thay đổi một chỉ thị, và bộ tích lũy được đặt lại tại mỗi điểm vào.
  • Các giới hạn Pki đi trước mật mã. Các mức trần PathValidationOptions (độ sâu 32, fanout chính sách 64, 5 s và 10 MiB mỗi lần tải) được kiểm tra trước công việc tốn kém. PathValidationResult::$trustAnchorTrusted khác biệt với $valid; requireTrustedAnchor làm cho một điểm cuối chưa được khẳng định trở nên không hợp lệ. strict() bật requireExplicitPolicy, vận chuyển thu hồi hard-fail, và requireTrustedAnchor. Tính hợp lệ của đường dẫn là tương đối theo neo theo RFC 5280 §6.1: một đường dẫn hợp lệ bắt đầu tại một neo tin cậy được cung cấp làm đầu vào.
  • Bề mặt theo lô. BatchSignatureValidator::validate() ném InvalidArgumentException cho một danh sách rỗng và từ chối các lô trên 1000 tài liệu thông qua một bộ bảo vệ tài nguyên. PHP sở hữu toàn bộ việc xác thực mật mã trong pipeline đó.

Các trường hợp biên & chế độ thất bại

Phần tiêu đề “Các trường hợp biên & chế độ thất bại”
  • Engine mặc định không có extractor. new AdESValidationEngine() chỉ thực hiện các kiểm tra bảo vệ: chữ ký rỗng hoặc dữ liệu đã ký rỗng là TOTAL_FAILED; bất kỳ cặp không rỗng nào cũng giải quyết thành INDETERMINATE / NO_SIGNING_CERTIFICATE_FOUND, không bao giờ là TOTAL_PASSED. Tiêm NextPDF\Enterprise\Security\Validation\CmsSignatureDataExtractor để có được xác minh mật mã.
  • Kiểm tra tin cậy TSA mặc định không có kho. Khi đó mọi chuỗi TSA đều báo cáo là không được tin cậy, nên các kết quả dấu thời gian chữ ký lưu trữ và dài hạn vẫn ở INDETERMINATE. Cung cấp các neo qua validateArchivalTimestampChain(..., $anchors) hoặc một TsaCertificateAtGenTimeCheck đã được cấu hình.
  • $pdfBytes rỗng. validateArchivalTimestampChain('') trả về TOTAL_FAILED / FORMAT_FAILURE.
  • Các dấu thời gian chữ ký trước bản vá không thể đạt. Các token được tạo bởi các phiên bản NextPDF trước bản vá ràng buộc nghiêm ngặt đã imprint một đầu vào khác. Chúng thất bại vĩnh viễn với ràng buộc Appendix A; hãy ký lại và đóng dấu thời gian lại để khôi phục một kết quả tích cực. Đây là một sự phá vỡ BC có chủ ý và được ghi lại.
  • Các DocTimeStamp trùng lặp hoặc chồng lấn. Một bản trùng lặp cùng bản sửa đổi, độ bao phủ bằng nhau hoặc chồng lấn, hoặc một token sau không chứa lỗ hổng chữ ký của token trước sẽ thất bại tại cổng thứ tự.
  • Trình quét là toàn phần và ở cấp byte. scan() bỏ qua một cách âm thầm các ứng viên dị dạng hoặc bị giả mạo; một /ByteRange mồi nhử bên trong một luồng nội dung bị từ chối. Nó không giải quyết các đối tượng gián tiếp hoặc duyệt bảng tham chiếu chéo.
  • Bao phủ, không phải khả năng tiếp cận. validateArchivalTimestampChain() chứng minh độ bao phủ dải byte bằng mật mã đến cuối tệp. Phân tích khả năng tiếp cận ở cấp đối tượng (ví dụ, một gốc tài liệu được trỏ lại bên trong một bản sửa đổi được bao phủ) được tuyên bố là ngoài phạm vi.
  • Sử dụng Pki trực tiếp sẽ ném. Gọi trực tiếp các bản triển khai PathValidatorInterface sẽ phơi bày PathValidationException cho các chuỗi không hợp lệ về cấu trúc, các mức trần bị vượt qua, các dạng ràng buộc không được hỗ trợ, và việc xuất PEM thất bại của một handle OpenSSLCertificate. Engine bắt lớp này; các trình gọi của riêng bạn phải xử lý nó.

Phía xác minh chấp nhận RSA PKCS#1 v1.5 với SHA-2 và ECDSA trên P-256/P-384/P-521. Các token RSASSA-PSS, EdDSA, và SHA-3 thất bại fail-closed do không được hỗ trợ; SHA-1 hạ cấp thành CRYPTO_CONSTRAINTS_FAILURE. Dưới hồ sơ chính sách mật mã FIPS 140-3 của Enterprise (được ghi lại cùng module bảo mật), ràng buộc áp dụng cho việc thuật toán nào được chấp nhận; bản thân luồng xác thực — tính lại digest, kiểm tra chữ ký, ràng buộc, xác thực đường dẫn — không thay đổi. NextPDF không nắm giữ chứng chỉ FIPS 140-3 nào và trang này không tuyên bố gì cả.

Tuyên bốTiêu chuẩnĐiều khoản
Xác thực Basic Signature là một khối xây dựng tái sử dụng được cho xác thực dấu thời gian và có-thời-gian.ETSI EN 319 102-1§5.3.1
Thất bại toàn vẹn ánh xạ tới HASH_FAILURE; một kiểm tra chữ ký thất bại ánh xạ tới SIG_CRYPTO_FAILURE.ETSI EN 319 102-1§5.2.7.4
Kiểm tra định dạng chạy trước và một kết quả không-đạt sẽ dừng quá trình.ETSI EN 319 102-1§5.3.4
Một trạng thái bất định liên quan đến thu hồi có thể được giải quyết bằng bằng chứng thời gian.ETSI EN 319 102-1§5.3.4
Một đường dẫn chứng nhận hợp lệ bắt đầu tại một neo tin cậy được cung cấp làm đầu vào.RFC 5280§6.1
Trình xác minh tính lại digest nội dung; nó phải bằng thuộc tính đã ký messageDigest.RFC 5652§5.6
messageImprint của dấu thời gian chữ ký băm giá trị trường signature của SignerInfo.RFC 3161Appendix A
Thuộc tính signature-time-stamp mang chính xác một AttributeValue.ETSI EN 319 122-1§5.3

Tất cả các điều khoản đều được diễn giải lại; NextPDF không tái tạo văn bản quy phạm. NextPDF không đưa ra tuyên bố tuân thủ hay chứng nhận AdES / PAdES nào. Hỗ trợ một tiêu chuẩn không phải là tuân thủ nó, và tuân thủ không phải là chứng nhận — NextPDF không nắm giữ chứng nhận nào và không cấp chứng nhận nào. Engine triển khai các quy trình xác thực được trích dẫn như một năng lực; nó không phải là một dịch vụ xác thực đủ điều kiện hay được chứng nhận, và một báo cáo TOTAL_PASSED là một tuyên bố mật mã, không phải một phán quyết pháp lý. Các giá trị enum tái sử dụng mẫu định danh ETSI URN để tương tác dữ liệu báo cáo; sự tái sử dụng đó không khẳng định bất kỳ sự chứng thực nào.

  • Ánh xạ nhãn điều khoản. Mã nguồn của gói chú thích các điểm vào là các điều khoản 5.2, 5.3, và 5.4 của EN 319 102-1. Kho tài liệu tuân thủ đặt bản thân quy trình xác thực Basic Signature tại điều khoản 5.3, với khối xây dựng mật mã tại 5.2.7.4. Trang này trích dẫn các số điều khoản đã truy xuất; hợp đồng hành vi, chứ không phải nhãn, mới là có thẩm quyền.
  • Các bài kiểm tra tất định. Mọi phép so sánh thời gian đều đi qua ClockInterface PSR-20 được tiêm. Tiêm một đồng hồ đóng băng để kiểm tra các kiểm tra cửa sổ, giới hạn lệch genTime 300 giây, và các quyết định về độ tươi của CRL.
  • Thành phần. Tất cả các cộng tác viên của engine đều được tiêm qua constructor và tùy chọn, với các mặc định fail-closed. Trình xác thực đường dẫn mặc định là CertificateChainValidator::withDefaults() trên đồng hồ của engine; các tùy chọn mặc định giữ cho việc xử lý chính sách và ràng buộc tên là một no-op đối với các đầu vào tuân thủ, không bị ràng buộc.
  • Không gian tên. Bề mặt engine nằm trong NextPDF\Enterprise\Security\Validation, bề mặt xác thực đường dẫn trong NextPDF\Enterprise\Security\Pki, và bộ điều phối lô trong NextPDF\Enterprise\Signature.
  • Vệ sinh báo cáo. Các báo cáo là bất biến và có thể tuần tự hóa qua toArray(). Ngữ cảnh chẩn đoán đặt lại tại mỗi điểm vào, nên một báo cáo không bao giờ mang bằng chứng từ một lần chạy trước trên cùng một thực thể engine.

Trang này chỉ ghi lại hành vi có thể quan sát từ bên ngoài và bề mặt API công khai được hỗ trợ. Các đường dẫn không gian tên nội bộ, các lớp trợ giúp, các bảng cơ chế, tên tệp runbook, và các tiền tố vé đều nằm ngoài phạm vi.