Enterprise phiên bản
Danh sách tin cậy (TSL)
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”Kiểm định chữ ký EU bắt đầu từ một sự thật đã công bố: nhà cung cấp nào nắm giữ trạng thái đủ điều kiện. Sự thật đó nằm trong các danh sách tin cậy (TSL) — những tài liệu XML đã ký mà mỗi quốc gia thành viên công bố, được lập chỉ mục bởi danh sách các danh sách tin cậy (LOTL) của EU. NextPDF\Enterprise\Security\Tsl\TslPolicyEnforcer biến một URL TSL hoặc XML thô thành một TslDocument mà bạn có thể dựa vào. Nó tải về qua HTTPS được bảo vệ, xác minh chữ ký XMLDSig so với các neo bạn ghim, phân tích XML được gia cố, và từ chối các danh sách lỗi thời. Thêm một lệnh gọi nữa, TslTrustAnchorProvider::buildBundle(), chuyển đổi các dịch vụ CA/QC đang hoạt động thành một gói neo tin cậy có phiên bản. Mọi cổng đều fail closed; mọi lần từ chối đều là một ngoại lệ có kiểu.
Trang này phụ trách việc nạp danh sách và rút ra neo. Kiểm định đường dẫn chứng chỉ nằm ở Kiểm định chữ ký. Ánh xạ mức đảm bảo eIDAS nằm ở Mức đảm bảo eIDAS. Ràng buộc tin cậy container nằm ở Ràng buộc tin cậy ASiC.
Khả dụng & cấp phép
Phần tiêu đề “Khả dụng & cấp phép”Khả năng này có mặt trong NextPDF Enterprise (nextpdf/enterprise) và kích hoạt bằng một phong bì giấy phép hạng Enterprise. Một triển khai không có quyền đó sẽ không nạp các lớp của khả năng này. So sánh các phiên bản và lấy giấy phép.
Cài đặt
Phần tiêu đề “Cài đặt”composer require nextpdf/enterpriseViệc kích hoạt yêu cầu phong bì giấy phép Enterprise của bạn. Xem Cài đặt và xác thực. Các lớp trên trang này nằm dưới NextPDF\Enterprise\Security\Tsl; các kiểu chính sách mạng nằm dưới NextPDF\Enterprise\Security. Việc tải trực tuyến còn cần thêm bất kỳ client PSR-18 và factory PSR-17 nào (ví dụ guzzlehttp/guzzle).
Tổng quan khái niệm
Phần tiêu đề “Tổng quan khái niệm”Theo Điều 22 của eIDAS, mỗi quốc gia thành viên công bố một danh sách tin cậy về các nhà cung cấp dịch vụ tin cậy đủ điều kiện của mình, được ký hoặc đóng dấu để xử lý tự động. ETSI TS 119 612 định nghĩa định dạng XML. Danh sách chỉ đáng tin cậy đúng mức mà ba lần kiểm tra làm được: chữ ký, cấu trúc, và độ tươi mới của nó. NextPDF chạy chúng theo thứ tự đó, như một pipeline duy nhất:
- Tải về —
TslFetcherlấy XML chỉ qua HTTPS. Một bộ bảo vệ SSRF xác thực host trước bất kỳ luồng ra nào. Các phản hồi bị giới hạn kích thước, và một bộ nhớ đệm PSR-16 cho phép tái xác thựcETagvà đọc trong môi trường cách ly mạng. - Xác minh —
TslSignatureVerifierkiểm tra chữ ký XMLDSig kiểu enveloped. Chứng chỉ ký phải chuỗi tới một neo tin cậy bạn đã ghim ngoài băng thông; không gì bên trong tài liệu được tin cậy tự thân. - Phân tích —
TslXmlParsertrích xuất thông tin scheme và mọi dịch vụ TSP thành mộtTslDocumentbất biến. Các tài liệu mang DOCTYPE bị từ chối trước khi bất kỳ bảng thực thể nào được dựng. - Thực thi — thời điểm
NextUpdatecủa danh sách không được trôi qua. Một danh sách lỗi thời bị loại bỏ, không bao giờ được tiêu thụ.
TslPolicyEnforcer kết hợp cả bốn; một TslDocument từ nó đã vượt qua mọi cổng. Từ đó, TslTrustAnchorProvider::buildBundle() lọc các dịch vụ vừa ở trạng thái granted vừa thuộc loại CA/QC, và phát ra một EnterpriseCaTrustAnchorBundle: các neo PEM đã ghim, một phiên bản tsl-<territory>-seq<N>, và một digest toàn vẹn SHA-256. Gói đó là thứ mà kiểm định đường dẫn và ràng buộc tin cậy ASiC tiêu thụ.
Cùng bộ máy đó bao trùm quy trình LOTL. Xác minh LOTL so với một neo được ghim thủ công; rồi xác minh mỗi TSL quốc gia thành viên so với các chứng chỉ ký mà LOTL khai báo cho nó.
Vì sao nó hoạt động theo cách này
Phần tiêu đề “Vì sao nó hoạt động theo cách này”Quyết định chịu tải là một hồ sơ xác minh cố định, tối giản thay vì XMLDSig tổng quát. Xử lý chữ ký XML linh hoạt — chuỗi transform tùy ý, tham chiếu ID do kẻ tấn công khai báo, tính linh động thuật toán — là nơi các trình xác minh xưa nay đổ vỡ. Vì vậy trình xác minh chỉ chấp nhận đúng một mô hình xử lý: exclusive C14N, một reference bao phủ gốc, và pipeline hai transform [enveloped-signature, exclusive-C14N], với mọi thứ khác bị từ chối fail-closed. Tin cậy không bao giờ tự khởi động từ chính tài liệu: các chứng chỉ KeyInfo chỉ luôn chuỗi tới các neo bạn đã cấu hình. Độ tươi mới nằm ngay trên chính TslDocument, nên mọi đường tiêu thụ đều thực thi nó thay vì một cộng tác viên tùy chọn duy nhất. Kết quả là một nhân nhỏ có thể kiểm thử, tất định, và trung thực về những gì nó từ chối.
Bối cảnh thiết kế: Giải thích về chữ ký đủ điều kiện.
Bề mặt API
Phần tiêu đề “Bề mặt API”TslPolicyEnforcer
Phần tiêu đề “TslPolicyEnforcer”Điểm vào được điều phối: tải về, xác minh, phân tích, và kiểm tra độ tươi mới trong một lệnh gọi.
public function __construct( private readonly TslFetcher $fetcher, private readonly TslSignatureVerifier $verifier, private readonly TslXmlParser $parser,) {}public function fetchAndVerify(string $url): TslDocumentpublic function verifyXml(string $xml): TslDocumentNém hoặc thất bại với: TslFetchException và NextPDF\Enterprise\Security\NetworkPolicyViolation từ giai đoạn tải về; TslSignatureException từ việc xác minh chữ ký; TslParseException từ việc phân tích, từ một giá trị NextUpdate không chuẩn tắc, hoặc từ một danh sách lỗi thời. Cả hai phương thức chỉ trả về một TslDocument khi mọi cổng đã vượt qua. Cổng lỗi thời ở đây so sánh NextUpdate với đồng hồ hệ thống hiện tại.
TslFetcher
Phần tiêu đề “TslFetcher”Trình tải về HTTP với bộ nhớ đệm dựa trên ETag và một cổng chính sách mạng.
public function __construct( private readonly ClientInterface $httpClient, private readonly RequestFactoryInterface $requestFactory, private readonly ?CacheInterface $cache = null, private readonly int $defaultTtlSeconds = 3600, private readonly int $maxBytes = 16_777_216, private readonly NetworkPolicy $networkPolicy = NetworkPolicy::ONLINE,) {}public function fetch(string $url): stringNém hoặc thất bại với: TslFetchException trên một URL không phải HTTPS, một host bị từ chối (SSRF), một trạng thái lỗi HTTP, một phản hồi quá cỡ, hoặc một body rỗng; NetworkPolicyViolation khi NetworkPolicy::STRICT_OFFLINE đang hoạt động và không có body nào trong bộ nhớ đệm. Các body trong bộ nhớ đệm thỏa mãn tái xác thực 304 Not Modified và là những body duy nhất được phục vụ dưới STRICT_OFFLINE. Các mục bộ nhớ đệm tồn tại trong $defaultTtlSeconds.
TslSignatureVerifier
Phần tiêu đề “TslSignatureVerifier”Trình xác minh XMLDSig cho các danh sách tin cậy đã ký.
public function __construct( private readonly array $trustAnchorsPem, private readonly int $clockTolerance = 0,)public function verify(string $xml): stringverify() trả về PEM của chứng chỉ ký, đã được chứng minh chuỗi tới một trong các $trustAnchorsPem. Hàm khởi tạo ném InvalidArgumentException khi danh sách neo rỗng. $clockTolerance mở rộng cửa sổ hiệu lực chứng chỉ một cách đối xứng, tính bằng giây.
Hồ sơ được chấp nhận là cố định. Thuật toán chữ ký: danh sách cho phép ALLOWED_SIG_ALG (rsa-sha256/384/512, ecdsa-sha256/384/512). Digest: danh sách cho phép ALLOWED_DIGEST_ALG (SHA-256, SHA-384, SHA-512). Chuẩn hóa: chỉ exclusive C14N 1.0. SHA-1 và MD5 bị từ chối là unsupported_algorithm.
Ném hoặc thất bại với: TslSignatureException, mang một reason máy đọc được:
| Reason code | Ý nghĩa |
|---|---|
missing_signature | Tài liệu không có phần tử ds:Signature. |
untrusted_signer | Chứng chỉ KeyInfo không chuỗi tới một neo đã cấu hình. |
invalid_signature | Khiếm khuyết cấu trúc, hoặc kiểm tra RSA/ECDSA thất bại. |
digest_mismatch | Digest của reference không khớp với tài liệu đã chuẩn hóa. |
unsupported_algorithm | Thuật toán chữ ký hoặc digest nằm ngoài danh sách cho phép. |
unsupported_transform | Chuẩn hóa hoặc pipeline transform nằm ngoài hồ sơ cố định. |
expired_anchor | Một chứng chỉ trong chuỗi nằm ngoài cửa sổ hiệu lực, hoặc hiệu lực của nó không phân tích được. |
TslXmlParser
Phần tiêu đề “TslXmlParser”Trình phân tích cấu trúc bất khả tri chữ ký. Người gọi PHẢI xác minh trước khi tin cậy đầu ra của nó; TslPolicyEnforcer thực thi thứ tự đó cho bạn.
public function parse(string $xml): TslDocumentNém hoặc thất bại với: TslParseException khi XML khai báo một DOCTYPE (gia cố chống XXE và bung nở thực thể), không thể phân tích, thiếu gốc TrustServiceStatusList, hoặc mang một TSLSequenceNumber không hợp lệ. Lớp này phơi bày các hằng namespace NS_TSL, NS_DSIG, và NS_TSL_X.
TslDocument và TspService
Phần tiêu đề “TslDocument và TspService”TslDocument là một value object bất biến: schemeTerritory, schemeOperatorName, tslType, sequenceNumber, issueDateTime, nextUpdate, tspServices, và rawXmlSha256 (hash bằng chứng trên các byte thô).
public function isStale(DateTimeImmutable $now): boolpublic function assertFresh(DateTimeImmutable $now): voidpublic function servicesOfType(string $serviceTypeIdentifier): arraypublic function activeServices(): arrayNém hoặc thất bại với: isStale() và assertFresh() ném TslParseException khi nextUpdate không phải một dateTime UTC chuẩn tắc với một Z tường minh hoặc offset số; một danh sách lỗi thời khiến assertFresh() ném. activeServices() chỉ trả về các dịch vụ ở trạng thái granted. servicesOfType() lọc theo URI loại dịch vụ ETSI.
Mỗi mục TspService phơi bày tspName, serviceName, serviceTypeIdentifier, serviceStatus, statusStartingTime, serviceCertificatePem, qualifiers, và additionalServiceInformation, cộng thêm:
public function isGranted(): boolpublic function isQualifiedCa(): boolCác hằng hữu ích: TspService::STATUS_GRANTED, TspService::STATUS_WITHDRAWN, TspService::TYPE_CA_QC, TspService::TYPE_OCSP_QC, TspService::TYPE_TSA_QTST. Các URI qualifier (ví dụ TspServiceQualifier::FOR_ESIG, FOR_ESEAL, QSCD_STATEMENT, NO_QSCD) xuất hiện trên TspServiceQualifier cho tầng ánh xạ eIDAS.
TslTrustAnchorProvider và gói neo
Phần tiêu đề “TslTrustAnchorProvider và gói neo”public function buildBundle(TslDocument $tsl, DateTimeImmutable $now): EnterpriseCaTrustAnchorBundleNém hoặc thất bại với: TslParseException khi TSL lỗi thời tại $now, khi nextUpdate không phải một giá trị UTC chuẩn tắc, hoặc khi danh sách không chứa dịch vụ CA/QC đang hoạt động nào.
Ghi chú BC — quy tắc tươi mới
buildBundle($now).buildBundle()yêu cầu thời điểm kiểm định và gọiTslDocument::assertFresh($now)trước khi trích xuất bất kỳ neo nào. Các bản sửa đổi trước đây có thể rút ra neo từ mộtTslDocumentdo trình phân tích tạo ra mà không có bất kỳ kiểm tra tươi mới nào. Người gọi từng nạp các danh sách được lưu đệm hoặc lưu trữ giờ phải truyền thời điểm mà việc kiểm định của họ chạy tại đó; một danh sách lỗi thời tại thời điểm đó sẽ ném thay vì âm thầm gieo các neo tin cậy.
EnterpriseCaTrustAnchorBundle được trả về là một value object chỉ đọc: anchorsPem (các neo PEM), bundleVersion (tsl-<territory>-seq<N>), và bundleSha256 (digest toàn vẹn trên phần nối các PEM đã chuẩn hóa). Hãy lấy nó từ buildBundle(); đừng tự tay dựng nó — hàm khởi tạo ném InvalidArgumentException khi digest không khớp hoặc PEM dị dạng.
public function containsFingerprint(string $anchorDerSha256Hex): boolpublic static function computeBundleSha256(array $anchorsPem): stringMẫu mã — Khởi động nhanh
Phần tiêu đề “Mẫu mã — Khởi động nhanh”Xác thực và tiêu thụ một danh sách tin cậy được sao chép cục bộ. Không cần phụ thuộc HTTP cho đường này: xác minh, phân tích, rồi kiểm tra độ tươi mới tại thời điểm kiểm định của bạn.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Security\Tsl\TslParseException;use NextPDF\Enterprise\Security\Tsl\TslSignatureException;use NextPDF\Enterprise\Security\Tsl\TslSignatureVerifier;use NextPDF\Enterprise\Security\Tsl\TslXmlParser;
// The list-signing certificate, pinned OUT-OF-BAND. Never take it from the list itself.$pinnedAnchorPem = (string) file_get_contents(__DIR__ . '/tsl-signer-anchor.pem');
// A trusted-list XML document you mirrored locally.$tslXml = (string) file_get_contents(__DIR__ . '/member-state-tsl.xml');
try { // 1. Authenticate: XMLDSig must verify AND the signer must chain to the pinned anchor. (new TslSignatureVerifier(trustAnchorsPem: [$pinnedAnchorPem]))->verify($tslXml);
// 2. Parse the now-authenticated bytes. $tsl = (new TslXmlParser())->parse($tslXml);
// 3. Freshness: refuse a list whose NextUpdate has passed. $tsl->assertFresh(new DateTimeImmutable('now', new DateTimeZone('UTC')));} catch (TslSignatureException $e) { fwrite(STDERR, "TSL rejected ({$e->reason}): {$e->getMessage()}" . PHP_EOL); exit(1);} catch (TslParseException $e) { fwrite(STDERR, 'TSL unusable: ' . $e->getMessage() . PHP_EOL); exit(1);}
echo "Territory: {$tsl->schemeTerritory}\n";echo "Sequence: {$tsl->sequenceNumber}\n";echo 'Active services: ' . count($tsl->activeServices()) . "\n";Đầu ra mong đợi (giá trị thay đổi theo danh sách):
Territory: DESequence: 127Active services: 143Mẫu mã — Sản xuất
Phần tiêu đề “Mẫu mã — Sản xuất”Nối dây pipeline trực tuyến đầy đủ: tải về được bảo vệ với bộ nhớ đệm, xác minh chữ ký, phân tích, độ tươi mới, rồi rút ra gói neo. Mỗi lớp thất bại được bắt và báo cáo một cách phân biệt.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;use GuzzleHttp\Psr7\HttpFactory;use NextPDF\Enterprise\Security\NetworkPolicy;use NextPDF\Enterprise\Security\NetworkPolicyViolation;use NextPDF\Enterprise\Security\Tsl\TslFetchException;use NextPDF\Enterprise\Security\Tsl\TslFetcher;use NextPDF\Enterprise\Security\Tsl\TslParseException;use NextPDF\Enterprise\Security\Tsl\TslPolicyEnforcer;use NextPDF\Enterprise\Security\Tsl\TslSignatureException;use NextPDF\Enterprise\Security\Tsl\TslSignatureVerifier;use NextPDF\Enterprise\Security\Tsl\TslTrustAnchorProvider;use NextPDF\Enterprise\Security\Tsl\TslXmlParser;use Symfony\Component\Cache\Adapter\FilesystemAdapter;use Symfony\Component\Cache\Psr16Cache;
// Any PSR-18 client, PSR-17 factory, and PSR-16 cache work; these are examples.$enforcer = new TslPolicyEnforcer( fetcher: new TslFetcher( httpClient: new Client(), requestFactory: new HttpFactory(), cache: new Psr16Cache(new FilesystemAdapter('tsl')), defaultTtlSeconds: 3600, maxBytes: 16_777_216, networkPolicy: NetworkPolicy::ONLINE, ), verifier: new TslSignatureVerifier( trustAnchorsPem: [(string) file_get_contents(__DIR__ . '/tsl-signer-anchor.pem')], clockTolerance: 300, ), parser: new TslXmlParser(),);
// Use the official publication URL for your scheme territory (HTTPS required).$tslUrl = 'https://trusted-lists.example.eu/member-state-tsl.xml';$now = new DateTimeImmutable('now', new DateTimeZone('UTC'));
try { $tsl = $enforcer->fetchAndVerify($tslUrl); $bundle = (new TslTrustAnchorProvider())->buildBundle($tsl, $now);} catch (NetworkPolicyViolation $e) { // Air-gapped posture: egress forbidden and no cached body available. fwrite(STDERR, 'Network policy: ' . $e->getMessage() . PHP_EOL); exit(75);} catch (TslFetchException $e) { // Transport layer: SSRF-rejected URL, HTTP error, oversized or empty body. fwrite(STDERR, 'Fetch failed: ' . $e->getMessage() . PHP_EOL); exit(1);} catch (TslSignatureException $e) { // Authentication layer: treat as a potential attack, not a retry case. fwrite(STDERR, "Signature rejected ({$e->reason}): {$e->getMessage()}" . PHP_EOL); exit(1);} catch (TslParseException $e) { // Structure or freshness: stale list, malformed NextUpdate, no active CA/QC services. fwrite(STDERR, 'List unusable: ' . $e->getMessage() . PHP_EOL); exit(1);}
printf( "Anchor bundle %s: %d anchors (sha256 %s...)\n", $bundle->bundleVersion, count($bundle->anchorsPem), substr($bundle->bundleSha256, 0, 12),);Đầu ra mong đợi (giá trị thay đổi theo danh sách):
Anchor bundle tsl-de-seq127: 96 anchors (sha256 4b0e2a9f31c8...)Ghi lại bundleVersion và bundleSha256 với mỗi lần kiểm định bạn thực hiện đối với gói. Chúng đặt tên cho tập neo chính xác đứng sau mỗi phán quyết.
Trường hợp biên & điểm cần lưu ý
Phần tiêu đề “Trường hợp biên & điểm cần lưu ý”- Cổng tươi mới của enforcer dùng đồng hồ hiện tại.
fetchAndVerify()vàverifyXml()từ chối một danh sách cóNextUpdateđã trôi qua. Để kiểm định lịch sử đối với một danh sách được lưu trữ, hãy điều khiểnTslSignatureVerifiervàTslXmlParsertrực tiếp, rồi gọiassertFresh()với thời điểm quá khứ mà bằng chứng của bạn hỗ trợ. buildBundle()tái khẳng định độ tươi mới tại$nowcủa bạn. Một danh sách đã vượt qua enforcer vẫn có thể bị từ chối ở đây nếu thời điểm kiểm định của bạn muộn hơn. Xem ghi chú BC ở trên.- Đừng bao giờ gieo
trustAnchorsPemtừ chính danh sách bạn đang xác minh. Neo phải đến từ một nguồn ghim ngoài băng thông (đối với LOTL) hoặc từ một danh sách cha đã được xác minh (đối với các TSL quốc gia thành viên). Bất cứ thứ gì khác đều khiến việc xác minh trở nên vòng vo. - Một DOCTYPE ở bất kỳ đâu là chí mạng. Các TSL tuân thủ không bao giờ mang một DTD, nên trình phân tích từ chối bất kỳ DOCTYPE nào trước khi libxml dựng một bảng thực thể. Đây là gia cố có chủ đích, không phải hạn chế của trình phân tích.
- Các trường cấu trúc thiếu suy giảm một cách an toàn. Một dịch vụ không có trạng thái đọc được sẽ được xem là withdrawn, nên nó không bao giờ có thể trở thành một neo. Một scheme territory thiếu sẽ phân tích thành
unknown. Các mặc định fail-closed giữ các mục dị dạng ra khỏi vật liệu tin cậy. - Các trung gian phải là CA thực sự. Trong khi dựng chuỗi, một issuer ứng viên không có
basicConstraints cA=TRUE(hoặc khẳng địnhkeyUsagemà không cókeyCertSign) sẽ bị bỏ qua. Một chứng chỉ thực thể cuối được luồn vàoKeyInfokhông thể đóng vai trò trung gian đường dẫn. Các chuỗi bị giới hạn ở độ sâu 8. NextUpdatephải là UTC chuẩn tắc. Một giá trị không có mộtZtường minh hoặc offset số sẽ némTslParseException. Nó không bao giờ được diễn giải lại theo múi giờ cục bộ của máy chủ.- Danh sách lớn và giới hạn byte. Các phản hồi được đọc tới
$maxBytes(mặc định 16 MiB). Hãy nâng giới hạn trong hàm khởi tạo nếu danh sách của scheme của bạn lớn hơn; việc cắt cụt hiện ra như một thất bại chữ ký, không bao giờ như một sự chấp nhận âm thầm. clockTolerancechỉ mở rộng. Nó thêm biên đối xứng vào các kiểm tra hiệu lực chứng chỉ. Nó không nới lỏng cổng tươi mới ở cấp danh sách.
Ghi chú bảo mật
Phần tiêu đề “Ghi chú bảo mật”- Xác minh trước khi phân tích, luôn luôn.
TslXmlParserbất khả tri chữ ký theo thiết kế.TslPolicyEnforcerđặt xác minh trước; nếu bạn tự kết hợp các mảnh, hãy giữ thứ tự đó. - Phòng thủ SSRF theo chiều sâu.
fetch()yêu cầuhttps://và xác thực host so với các dải riêng tư, loopback, link-local, CGN, và metadata đám mây, với phân giải DNS A và AAAA để giảm thiểu rebinding. Một URL bị từ chối sẽ ném trước bất kỳ luồng ra nào. - Gia cố chống XXE và bung nở thực thể. Các tài liệu mang DOCTYPE bị từ chối trước khi bảng thực thể tồn tại và lại một lần nữa sau khi nạp. Việc nạp thực thể mạng bị tắt; các thực thể ngoài không bao giờ được thay thế.
- Hồ sơ XMLDSig nghiêm ngặt. Chỉ exclusive C14N; đúng cặp transform
[enveloped-signature, exclusive-C14N]; reference đã xác minh phải bao phủ gốc tài liệu; transform enveloped chỉ gỡ chữ ký đã xác minh, giữ nguyên các chữ ký anh em. Các thuật toán lỗi thời (SHA-1, MD5) bị từ chối. - Kỷ luật chuỗi. Mỗi mắt xích của chuỗi — người ký, các trung gian, và trường hợp neo trực tiếp — được kiểm tra tính hiệu lực theo thời gian, fail-closed trên các biên hiệu lực không phân tích được. Các vòng lặp được phát hiện; độ sâu bị giới hạn.
- Tư thế cách ly mạng. Dưới
NetworkPolicy::STRICT_OFFLINE, đường tải về không thực hiện luồng ra hướng ngoài nào cả; chỉ một body được lưu đệm trước đó mới có thể được phục vụ, và mọi thứ khác đều némNetworkPolicyViolationfail-fast. - Digest gói phát hiện hỏng hóc, không phải giả mạo.
bundleSha256được xác thực khi dựng và phát hiện sai lệch sao chép. Khi digest được rút ra từ chính các neo mà nó bảo vệ, nó không phải bằng chứng chống giả mạo độc lập. Hãy ghim các digest ngoài băng thông khi vận chuyển các gói giữa các hệ thống.
Sự phù hợp
Phần tiêu đề “Sự phù hợp”Pipeline tiêu thụ các danh sách tin cậy như ETSI TS 119 612 định nghĩa: nó xác thực chữ ký của scheme operator (§5.7), phân tích các cấu trúc thông tin scheme và danh sách nhà cung cấp (§5.3, §5.4, §5.5), thực thi các quy tắc dateTime UTC (§5.1.3), và loại bỏ các danh sách có NextUpdate đã trôi qua (§5.3.15). Điều này hỗ trợ mô hình Điều 22 của eIDAS về các danh sách tin cậy được ký, có thể xử lý bằng máy. Việc dựng chuỗi áp dụng các cổng basic-constraints và key-usage của RFC 5280 cho các issuer ứng viên.
Hỗ trợ không phải là sự phù hợp, và sự phù hợp không phải là chứng nhận. NextPDF triển khai các kiểm tra mà trang này mô tả; nó chưa được chứng nhận đối với ETSI TS 119 612, eIDAS, hay bất kỳ tiêu chuẩn nào khác bởi bất kỳ cơ quan nào, và NextPDF không giữ chứng nhận nào và cũng không cấp chứng nhận nào. Việc tiêu thụ một danh sách tin cậy qua API này tự nó không làm cho một chữ ký trở nên “đủ điều kiện” hay có hiệu lực pháp lý. Việc liệu toàn bộ quy trình kiểm định của bạn có đáp ứng một yêu cầu pháp lý hay mua sắm hay không là điều mà các đánh giá viên của bạn quyết định.
Hành vi ở chế độ FIPS
Phần tiêu đề “Hành vi ở chế độ FIPS”Việc xác minh chữ ký TSL chạy các kiểm tra RSA và ECDSA trong tiến trình thông qua thư viện crypto đi kèm. Nó không được định tuyến qua bộ bảo vệ runtime chế độ FIPS của Enterprise, và việc bật chế độ FIPS không thay đổi hành vi của nó. Nó không phải một dịch vụ mật mã được kiểm định FIPS, và không có chứng nhận FIPS 140 nào được tuyên bố. Các triển khai có nghĩa vụ FIPS nên khoanh vùng API này cho phù hợp và xem Chính sách mật mã FIPS 140-2/3.
Hợp đồng hành vi
Phần tiêu đề “Hợp đồng hành vi”fetch()chỉ thực hiện luồng ra cho các URL HTTPS vượt qua xác thực SSRF, đọc tối đa$maxBytes, và tuân thủNetworkPolicyđã cấu hình; dướiSTRICT_OFFLINEchỉ một body được lưu đệm mới từng được trả về.- Không đầu ra nào của trình phân tích trở thành vật liệu tin cậy trước khi
verify()thành công;TslPolicyEnforcerbảo đảm thứ tự đó. verify()chỉ trả về PEM của người ký khi digest và chữ ký khớp dưới hồ sơ cố định và người ký chuỗi, trong độ sâu 8 và với mọi mắt xích còn hiệu lực theo thời gian, tới một neo đã cấu hình.- Enforcer từ chối bất kỳ danh sách nào có
NextUpdateđã trôi qua tại đồng hồ hiện tại;buildBundle()tái khẳng định độ tươi mới tại thời điểm do người gọi cung cấp trước khi rút ra neo. - Các neo chỉ được rút ra độc quyền từ các dịch vụ ở trạng thái granted với loại dịch vụ CA/QC; một tập hoạt động rỗng sẽ ném thay vì tạo ra một gói rỗng.
- Mọi thất bại là một ngoại lệ có kiểu (
TslFetchException,NetworkPolicyViolation,TslSignatureExceptionvới một reason code,TslParseException); không phương thức nào trả về một tài liệu một phần hoặc chưa được xác minh.
Phương án dự phòng Core
Phần tiêu đề “Phương án dự phòng Core”NextPDF Core kiểm định các chữ ký PDF đối với các neo tin cậy mà bạn ghim tường minh thông qua hợp đồng CaTrustAnchorBundle của nó — xem Bảo mật Core. Core không có khả năng danh sách tin cậy: không tải TSL, không xác thực danh sách XMLDSig, không phân tích ETSI TS 119 612, và không rút neo từ các mục dịch vụ đủ điều kiện. Chỉ với Core, bạn duy trì tập neo của mình bằng tay; việc rút nó từ các danh sách tin cậy EU đã được xác thực đòi hỏi NextPDF Enterprise.
Ranh giới công bố
Phần tiêu đề “Ranh giới công bố”Trang này chỉ ghi chép 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 namespace nội bộ, các lớp hỗ trợ, các bảng cơ chế, tên tệp runbook, và tiền tố ticket nằm ngoài phạm vi.
Xem thêm
Phần tiêu đề “Xem thêm”- Ràng buộc tin cậy ASiC — ràng buộc người ký container với các gói neo mà trang này rút ra.
- Mức đảm bảo eIDAS — ánh xạ bằng chứng
TspServicethành các Mức Đảm bảo. - Kiểm định chữ ký — phía xác minh tiêu thụ các neo tin cậy để kiểm định đường dẫn.
- Bảo mật — tham chiếu chuyên sâu — tham chiếu cấp hợp đồng của module bảo mật Enterprise.
- Giải thích về chữ ký đủ điều kiện — vì sao các danh sách tin cậy neo giữ mô hình tin cậy EU.
- Kiểm định dài hạn — vì sao thời điểm kiểm định và bằng chứng được bảo tồn lại quan trọng.