Pro รุ่น
การลงนามด้วย Cloud KMS — การอ้างอิงเชิงลึก
ภาพรวมโดยสังเขป
หัวข้อที่มีชื่อว่า “ภาพรวมโดยสังเขป”หน้านี้เป็นเอกสารอ้างอิงระดับสัญญาสำหรับพื้นผิวการลงนาม cloud-KMS ของ NextPDF Pro พื้นผิวนี้ประกอบด้วย Service Provider Interface หนึ่งตัวคือ NextPDF\Pro\Security\Signing\Kms\KmsSignerInterface และตัวลงนามของผู้ให้บริการสามตัว ได้แก่ AwsKmsSigner, AzureKeyVaultSigner และ GcpKmsSigner อะแดปเตอร์สองตัวคือ AwsKmsSigningStrategy และ AzureKeyVaultSigningStrategy ทำหน้าที่เชื่อมตัวลงนามเข้ากับสัญญา SigningStrategy ของ Pro ตัวลงนามแต่ละตัวส่งเฉพาะ message digest ไปยังผู้ให้บริการผ่าน PSR-18 HTTP เท่านั้น คีย์ส่วนตัวและเอกสารจะไม่ข้ามขอบเขตนี้เลย หน้านี้ระบุ public API, สัญญาพฤติกรรมที่สังเกตได้ และโหมดความล้มเหลวแบบมีชนิดกำกับ การจัดการเซสชัน (RemoteSigningSession, SequentialSigner) และการประทับเวลา (PadesBtTimestamper) อยู่ในหน้าของตนเอง
ความพร้อมใช้งานและการอนุญาต
หัวข้อที่มีชื่อว่า “ความพร้อมใช้งานและการอนุญาต”ความสามารถนี้มาพร้อมกับ NextPDF Pro (nextpdf/pro) และเปิดใช้งานด้วย license envelope ระดับ Pro การติดตั้งที่ไม่มีสิทธิ์ดังกล่าวจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบรุ่นและรับสิทธิ์ใช้งาน
พื้นผิว public API
หัวข้อที่มีชื่อว่า “พื้นผิว public API”| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนข้อยกเว้นหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
KmsSignerInterface | — | ขยายสัญญา HsmSignerInterface ของ Core | — | — | SPI สำหรับไดรเวอร์ KMS และ HSM; id ในตัวที่สงวนไว้: aws-kms, azure-keyvault, gcp-kms, pkcs11, openssl-cli |
KmsSignerInterface::providerId() | ไม่มี | คีย์สำหรับค้นหาใน registry ที่เสถียร | non-empty-string | — | ไดรเวอร์ของบุคคลที่สามต้องกำหนด namespace ให้กับตัวระบุของตน |
KmsSignerInterface::signWithVersion() | $data, $algorithm = 'sha256WithRSAEncryption', $keyVersion = null | เวอร์ชันคีย์ที่เป็น null จะย้อนกลับไปใช้ค่าเริ่มต้นของผู้ให้บริการ | ออกเทตของลายเซ็นชนิด string: RSA ตามที่ผู้ให้บริการคืนค่ามา (วางลงใน SignerInfo.signature โดยตรง), ECDSA เป็น DER ECDSA-Sig-Value ตามกฎของ CMS | KeyManagementException, UnsupportedAlgorithmException, SignatureFailedException | ความหมายของ null ต่างกันในแต่ละผู้ให้บริการ; ดูสัญญาพฤติกรรม |
KmsSignerInterface::supportsAlgorithm() | string $algorithm | การตรวจสอบความสามารถ; ไม่มีการทำ I/O | bool | — | เรียกใช้ก่อนการเลือกผู้ให้บริการ |
KmsSignerInterface::supportedAlgorithms() | ไม่มี | แสดงรายชื่อแบบ OpenSSL ที่ผู้ให้บริการยอมรับ | list<non-empty-string> | — | — |
AwsKmsSigner | constructor: AwsKmsConfig, cert DER, chain DER, PSR-18 client, PSR-17 factories, PSR-3 logger | อัลกอริทึมมีค่าเริ่มต้นเป็น KmsSigningAlgorithm::RsaPkcs1Sha256 | — | ดูเมท็อด | final; PROVIDER_ID = 'aws-kms' |
AwsKmsSigner::create() | key id, cert DER, dependency ของ PSR, chain ที่เลือกได้, config, logger | สร้าง AwsKmsConfig::fromEnvironment($keyId) เมื่อ $config เป็น null | self | — | อ่านตัวแปรสภาพแวดล้อม AWS_* มาตรฐาน |
AwsKmsSigner::withAlgorithm() | KmsSigningAlgorithm $algorithm | คืนค่าโคลนที่ถูกแก้ไข | self | — | ต้องตรงกับชนิดของคีย์ที่จัดเตรียมไว้ใน AWS KMS |
AwsKmsSigner::sign() | $data, $algorithm = 'sha256WithRSAEncryption' | มอบหมายให้ signWithVersion($data, $algorithm, null) | string | เหมือน signWithVersion() | เส้นทางสัญญา Core แบบสองอาร์กิวเมนต์รุ่นเดิม |
AzureKeyVaultSigner | constructor: AzureKeyVaultConfig, cert DER, chain DER, PSR-18 client, PSR-17 factories, PSR-3 logger | อัลกอริทึมมีค่าเริ่มต้นเป็น AzureSigningAlgorithm::Rs256; access token ใน config จะใช้เป็นค่าเริ่มต้นของ bearer token | — | ดูเมท็อด | final; PROVIDER_ID = 'azure-keyvault' |
AzureKeyVaultSigner::create() | vault name, key name, cert DER, dependency ของ PSR, chain ที่เลือกได้, config, logger | สร้าง AzureKeyVaultConfig::fromEnvironment() เมื่อ $config เป็น null | self | — | รองรับ token ที่ได้มาล่วงหน้าหรือ credential ของ service-principal |
AzureKeyVaultSigner::withAlgorithm() | AzureSigningAlgorithm $algorithm | คืนค่าโคลนที่ถูกแก้ไข | self | — | คีย์ RSA ใช้ค่า RS/PS; คีย์ EC ใช้ค่า ES |
GcpKmsSigner | constructor: GcpKmsConfig, cert DER, chain DER, PSR-18 client, PSR-17 factories, PSR-3 logger | อัลกอริทึมมีค่าเริ่มต้นเป็น GcpKmsSigningAlgorithm::RsaSignPkcs1_2048Sha256 | — | ดูเมท็อด | final; PROVIDER_ID = 'gcp-kms', API_VERSION = 'v1' |
GcpKmsSigner::create() | project id, location, key ring, crypto key, cert DER, dependency ของ PSR, chain ที่เลือกได้, config, logger | สร้าง GcpKmsConfig::fromEnvironment() เมื่อ $config เป็น null | self | — | การขอ bearer token ถูกมอบหมายให้ผู้เรียกใช้ |
GcpKmsSigner::withAlgorithm() | GcpKmsSigningAlgorithm $algorithm | เป็นเพียงการแสดงตัวอย่างในช่วง config เท่านั้น; wire name ต่อการเรียกจะมีผลเหนือกว่าในเวลาลงนาม | self | — | ขนาดคีย์ถูกกำหนดตายตัวโดย CryptoKeyVersion ที่จัดเตรียมไว้ |
AwsKmsSigningStrategy | constructor: AwsKmsSigner $signer | ทำงานแบบซิงโครนัส; isAsync() คืนค่า false | — | ส่งต่อข้อยกเว้นของตัวลงนามที่ถูกห่อไว้ | อะแดปเตอร์สำหรับ RemoteSigningSession::complete() |
AzureKeyVaultSigningStrategy | constructor: AzureKeyVaultSigner $signer | ทำงานแบบซิงโครนัส; isAsync() คืนค่า false | — | ส่งต่อข้อยกเว้นของตัวลงนามที่ถูกห่อไว้ | อะแดปเตอร์สำหรับ RemoteSigningSession::complete() |
KmsSigningAlgorithm | enum, 9 เคส (RSA PKCS#1, RSA-PSS, ECDSA; SHA-256/384/512) | — | ค่า wire ของ SigningAlgorithm ใน AWS KMS | InvalidArgumentException จาก fromOpenSslName() | resolveForWireName() คงค่า PSS digest ที่กำหนดไว้ |
AzureSigningAlgorithm | enum, 9 เคส (RS256…ES512) | — | ค่าแบบ JWA ของ Azure Key Vault | InvalidArgumentException จาก fromOpenSslName() | isEcdsa() ระบุค่าที่ผลลัพธ์ต้องแปลงเป็น DER |
GcpKmsSigningAlgorithm | enum, 10 เคส (EC P-256/P-384, RSA PKCS#1, RSA-PSS) | — | ค่าอัลกอริทึมของ CryptoKeyVersion ใน GCP | UnsupportedAlgorithmException จาก fromOpenSslName() | การแปลง wire name จะเลือกขนาดคีย์ที่ตรงกันเล็กที่สุด |
ลายเซ็นของจุดเข้าใช้งาน
หัวข้อที่มีชื่อว่า “ลายเซ็นของจุดเข้าใช้งาน”public function providerId(): string;
public function signWithVersion( string $data, string $algorithm = 'sha256WithRSAEncryption', ?string $keyVersion = null,): string;
public function supportsAlgorithm(string $algorithm): bool;
public function supportedAlgorithms(): array;public static function create( string $keyId, string $certDer, ClientInterface $httpClient, RequestFactoryInterface $requestFactory, StreamFactoryInterface $streamFactory, array $chainDer = [], ?AwsKmsConfig $config = null, ?LoggerInterface $logger = null,): self
public function withAlgorithm(KmsSigningAlgorithm $algorithm): self
public function sign(string $data, string $algorithm = 'sha256WithRSAEncryption'): stringpublic static function create( string $vaultName, string $keyName, string $certDer, ClientInterface $httpClient, RequestFactoryInterface $requestFactory, StreamFactoryInterface $streamFactory, array $chainDer = [], ?AzureKeyVaultConfig $config = null, ?LoggerInterface $logger = null,): self
public function withAlgorithm(AzureSigningAlgorithm $algorithm): selfpublic static function create( string $projectId, string $location, string $keyRing, string $cryptoKey, string $certDer, ClientInterface $httpClient, RequestFactoryInterface $requestFactory, StreamFactoryInterface $streamFactory, array $chainDer = [], ?GcpKmsConfig $config = null, ?LoggerInterface $logger = null,): self
public function withAlgorithm(GcpKmsSigningAlgorithm $algorithm): selfpublic function __construct( private AwsKmsSigner $signer,) {}
public function sign(string $signedAttributesDer): stringpublic function __construct( private AzureKeyVaultSigner $signer,) {}
public function sign(string $signedAttributesDer): stringสัญญาพฤติกรรม
หัวข้อที่มีชื่อว่า “สัญญาพฤติกรรม”การแปลงสัญญา
หัวข้อที่มีชื่อว่า “การแปลงสัญญา”KmsSignerInterface ขยายสัญญา HsmSignerInterface ของ Core โดยเพิ่ม providerId(), signWithVersion() ที่รับรู้เวอร์ชันคีย์ และการตรวจสอบความสามารถ supportsAlgorithm() และ supportedAlgorithms() เมท็อด sign() แบบสองอาร์กิวเมนต์ที่สืบทอดมาจะมอบหมายให้ signWithVersion() ด้วยเวอร์ชันคีย์ที่เป็น null บนตัวลงนามทั้งสามตัว getCertificateDer(), getCertificateChainDer() และ getPublicKeyAlgorithm() ถูกสร้างขึ้นจากวัสดุที่ constructor จัดหาให้ การตรวจสอบความสามารถไม่มีการทำ I/O ตัวลงนามแต่ละตัวยังเปิดเผย accessor getSigningAlgorithm() และ getConfig() สำหรับการตรวจสอบด้วย
การส่งเฉพาะ digest
หัวข้อที่มีชื่อว่า “การส่งเฉพาะ digest”ตัวลงนามแต่ละตัวจะแฮช $data ภายในเครื่องด้วย digest ของอัลกอริทึมที่แปลงแล้ว และส่งเฉพาะ digest นั้น AWS รับ digest แบบ base64 พร้อม MessageType: DIGEST Azure รับ digest แบบ base64url ใน body ของคำขอลงนาม GCP รับ digest แบบ base64 ในฟิลด์ digest เฉพาะของอัลกอริทึม ไบต์ของเอกสารจะไม่ปรากฏในคำขอของผู้ให้บริการเลย การส่งข้อมูลทั้งหมดใช้ PSR-18 HTTP client มาตรฐานผ่าน HTTPS endpoint ของผู้ให้บริการ; ไม่มีการใช้ SDK ของผู้ให้บริการคลาวด์ใด ๆ
การแปลงเวอร์ชันคีย์
หัวข้อที่มีชื่อว่า “การแปลงเวอร์ชันคีย์”signWithVersion() ตรวจสอบอาร์กิวเมนต์เวอร์ชันคีย์แบบ fail-closed ก่อนที่จะสร้างคำขอใด ๆ ค่าที่ไม่ผ่านไวยากรณ์ของผู้ให้บริการจะทำให้เกิด KeyManagementException และป้องกันการแทรก URL-segment หรือ KeyId
| ผู้ให้บริการ | เวอร์ชันคีย์ null | สตริงว่าง | ไวยากรณ์การแทนที่ |
|---|---|---|---|
AwsKmsSigner | ใช้ AwsKmsConfig::$keyId; alias หรือ ARN จะถูกแปลงเป็นคีย์ปัจจุบันที่ฝั่งผู้ให้บริการ | ถูกปฏิเสธ | UUID (มีหรือไม่มีขีดคั่น), alias/<name> หรือ ARN ของคีย์/alias ใน KMS |
AzureKeyVaultSigner | ใช้เวอร์ชันคีย์ที่กำหนดไว้; ค่า config ที่ว่างจะเลือกเวอร์ชันที่เปิดใช้งานล่าสุดที่ฝั่งเซิร์ฟเวอร์ | ถูกปฏิเสธ | ตัวระบุเลขฐานสิบหก 32 อักขระ |
GcpKmsSigner | ใช้เวอร์ชันที่ปักหมุดไว้ใน GcpKmsConfig; หากไม่มีการปักหมุด จะทำให้เกิด KeyManagementException | ถูกปฏิเสธ | id ของ CryptoKeyVersion แบบเลขฐานสิบ เป็นตัวเลขเท่านั้น |
GCP ไม่มี primitive “active version” ที่ฝั่งเซิร์ฟเวอร์ asymmetric-sign endpoint ทำงานกับทรัพยากร cryptoKeyVersions/{n} ที่เจาะจงเท่านั้น ดังนั้นจึงต้องสามารถแปลงเวอร์ชันได้เสมอ
การแปลงอัลกอริทึม
หัวข้อที่มีชื่อว่า “การแปลงอัลกอริทึม”ชั้น strategy จะส่งต่อ wire name แบบ OpenSSL AWS และ Azure ยอมรับ wire name เจ็ดชื่อ (PKCS#1 และ ECDSA ที่ SHA-256/384/512 บวกกับ RSASSA-PSS) GCP ยอมรับห้าชื่อ (sha256WithRSAEncryption, sha512WithRSAEncryption, RSASSA-PSS, ecdsa-with-SHA256, ecdsa-with-SHA384) wire name RSASSA-PSS ไม่ได้เข้ารหัส digest ไว้ จึงมีความกำกวมด้าน digest AwsKmsSigner แปลงมันผ่าน KmsSigningAlgorithm::resolveForWireName() ซึ่งคงค่า digest ของตัวแปร PSS ที่กำหนดไว้ AzureKeyVaultSigner เชื่อถือตัวแปร PSS ที่กำหนดไว้สำหรับชื่อที่กำกวม โดยจะทำให้เกิด UnsupportedAlgorithmException หาก digest ของ PSS ที่แปลงได้แตกต่างจากค่าที่กำหนดไว้ GcpKmsSigner แปลง enum จาก wire name ใหม่ในทุกการเรียก; withAlgorithm() บน GCP เป็นการแสดงตัวอย่างในช่วง config และไม่เปลี่ยนพฤติกรรมในเวลาลงนาม wire name ที่ไม่รองรับจะทำให้เกิด UnsupportedAlgorithmException ก่อนการเรียกเครือข่ายใด ๆ บน AwsKmsSigner และ GcpKmsSigner การเรียกลงนามจะอัปเดตค่าที่ getSigningAlgorithm() รายงานในภายหลังให้เป็นอัลกอริทึมต่อการเรียกที่แปลงแล้ว บน AzureKeyVaultSigner การแปลงเป็นแบบเฉพาะการเรียกและค่าที่กำหนดไว้ยังคงเป็นค่าหลัก
การทำให้ลายเซ็นเป็นรูปแบบมาตรฐาน
หัวข้อที่มีชื่อว่า “การทำให้ลายเซ็นเป็นรูปแบบมาตรฐาน”AWS และ GCP คืนค่าลายเซ็นในรูปแบบที่ CMS ใช้: ออกเทตของลายเซ็น RSA จะเข้าสู่ SignerInfo.signature โดยไม่เปลี่ยนแปลง และ ECDSA มาในรูปแบบที่เข้ารหัส DER แล้ว Azure คืนค่า ECDSA ในรูปแบบดิบ IEEE P1363 (r||s) ซึ่งตัวลงนามจะแปลงเป็น DER ECDSA-Sig-Value ก่อนคืนค่า
การผสานรวม CMS และส่วนที่อยู่ติดกัน
หัวข้อที่มีชื่อว่า “การผสานรวม CMS และส่วนที่อยู่ติดกัน”อะแดปเตอร์ SigningStrategy จะลงนามในแอตทริบิวต์ที่ลงนามซึ่งเข้ารหัส DER แล้วที่เซสชันจัดหาให้ เมื่อมีแอตทริบิวต์ที่ลงนามอยู่ ข้อมูลนำเข้าของลายเซ็น CMS คือ digest ของการเข้ารหัส DER ทั้งหมดของค่า SignedAttrs — RFC 5652 §5.4 getSignatureAlgorithmOid() และ getDigestAlgorithm() ของอะแดปเตอร์จะป้อนค่าให้ฟิลด์ signatureAlgorithm และ digestAlgorithm ของ SignerInfo — RFC 5652 §5.3 ไบต์ที่คืนค่ามาจะกลายเป็น OCTET STRING ของลายเซ็นใน SignerInfo — RFC 5652 §5.5 การประกอบ CMS, การจัดการ ByteRange และวงจรชีวิตของเซสชันเป็นของ RemoteSigningSession; โฟลว์แบบหลายฝ่ายเป็นของ SequentialSigner การประทับเวลาลายเซ็น PAdES B-T ซึ่ง messageImprint แฮชค่าลายเซ็นของ SignerInfo — RFC 3161 Appendix A — ถูกใช้โดย PadesBtTimestamper ไม่ใช่โดยตัวลงนามเหล่านี้ ทั้งสามตัวมีการบันทึกไว้ใน เอกสารอ้างอิงเชิงลึกด้านความปลอดภัยของ Pro
กรณีขอบและโหมดความล้มเหลว
หัวข้อที่มีชื่อว่า “กรณีขอบและโหมดความล้มเหลว”- เวอร์ชันคีย์ที่เป็นสตริงว่างจะถูกปฏิเสธบนผู้ให้บริการทั้งสามตัว ส่ง
nullเพื่อสืบทอดค่าเริ่มต้นที่กำหนดไว้ - เวอร์ชันคีย์ที่มีรูปแบบไม่ถูกต้องจะถูกปฏิเสธก่อนที่จะสร้างคำขอใด ๆ โดยระบุค่าที่เป็นปัญหาไว้ในข้อยกเว้น
AwsKmsSignerที่มีAwsKmsConfig::$keyIdว่างและเวอร์ชันคีย์nullจะทำให้เกิดKeyManagementException- การตอบกลับของผู้ให้บริการที่บ่งชี้ความล้มเหลวด้านการจัดการคีย์จะแมปไปยัง
KeyManagementException: AWSNotFoundException,DisabledException,KeyUnavailableException,InvalidKeyUsageExceptionหรือ HTTP 404; Azure HTTP 404,KeyNotFound,KeyDisabledหรือKeyNotActive; GCP HTTP 404 หรือ 409,NOT_FOUND,FAILED_PRECONDITIONหรือ HTTP 400 ที่ข้อความระบุเวอร์ชัน - การตอบกลับของผู้ให้บริการที่ไม่ใช่ 200 อื่น ๆ จะทำให้เกิด
SignatureFailedExceptionบน AWS และ GCP และAzureKeyVaultExceptionบน Azure - ความล้มเหลวในการขนส่ง PSR-18 ระหว่างการลงนามจะแมปไปยัง
SignatureFailedExceptionโดยเก็บข้อยกเว้นของ client ไว้เป็น throwable ก่อนหน้า AzureKeyVaultSignerที่ไม่มี access token และไม่มี credential ของ service-principal จะทำให้เกิดAzureKeyVaultExceptionก่อนการเรียก vault ใด ๆ การขอ token ของ Azure AD ที่ล้มเหลวก็ทำให้เกิดAzureKeyVaultExceptionเช่นกันAzureKeyVaultSignerตรวจสอบ vault name, key name, key version และ tenant id กับไวยากรณ์ที่ Azure เผยแพร่ ณ จุดคอขวดของคำขอ ค่าที่มีอักขระเชิงโครงสร้างของ URL จะล้มเหลวแบบ fail closed ด้วยAzureKeyVaultExceptionGcpKmsSignerที่ไม่มี OAuth2 bearer token จะทำให้เกิดSignatureFailedException; การขอ token เป็นความรับผิดชอบของผู้เรียกใช้- การตอบกลับของผู้ให้บริการที่ไม่ใช่ JSON ที่ถูกต้อง หรือที่ไม่มีฟิลด์ลายเซ็น จะทำให้เกิด
SignatureFailedException(Azure: ฟิลด์valueที่ขาดหายจะทำให้เกิดAzureKeyVaultException) - ฟิลด์ลายเซ็นของผู้ให้บริการที่ถอดรหัส base64 ไม่สำเร็จจะทำให้เกิด
SignatureFailedExceptionบน AWS และ GCP และAzureKeyVaultExceptionบน Azure - ไม่มีอะแดปเตอร์
SigningStrategyสำหรับGcpKmsSignerในเวอร์ชัน 3.1.0 ตัวลงนาม GCP ถูกใช้งานผ่านสัญญาKmsSignerInterfaceโดยตรง
พฤติกรรมในโหมด FIPS
หัวข้อที่มีชื่อว่า “พฤติกรรมในโหมด FIPS”AwsKmsConfig::withFipsEndpoint() กำหนดเส้นทางคำขอไปยัง kms-fips endpoint ของภูมิภาค สถานะการตรวจรับรอง FIPS ของ endpoint นั้นเป็นคุณสมบัติของ AWS ไม่ใช่ของ NextPDF AzureKeyVaultConfig และ GcpKmsConfig ไม่ได้เปิดเผยตัวช่วย FIPS endpoint เฉพาะในเวอร์ชัน 3.1.0 การคำนวณ digest ทำงานภายในกระบวนการด้วยฟังก์ชัน hash() ของ PHP และตัวมันเองไม่ใช่โมดูลที่ผ่านการตรวจรับรอง NextPDF Pro สามารถทำงานกับขอบเขต KMS หรือ HSM ที่ผ่านการตรวจรับรอง FIPS ได้ แต่ NextPDF ไม่ใช่โมดูลการเข้ารหัสที่ผ่านการตรวจรับรอง FIPS และไม่ได้อ้างการรับรอง FIPS ใด ๆ
ความสอดคล้อง
หัวข้อที่มีชื่อว่า “ความสอดคล้อง”| ข้อกล่าวอ้าง | มาตรฐาน | ข้อ |
|---|---|---|
| strategy ลงนามในแอตทริบิวต์ที่ลงนามซึ่งเข้ารหัส DER แล้ว; digest ของข้อมูลนำเข้าลายเซ็น CMS ครอบคลุมการเข้ารหัส DER ทั้งหมดของ SignedAttrs | RFC 5652 | §5.4 |
| SignedAttributes เข้ารหัส DER และมีอย่างน้อย content-type และ message-digest; signatureAlgorithm ระบุอัลกอริทึมของตัวลงนาม | RFC 5652 | §5.3 |
| ไบต์ลายเซ็นที่คืนค่ามาเข้ารหัสเป็น OCTET STRING และบรรจุในฟิลด์ลายเซ็นของ SignerInfo | RFC 5652 | §5.5 |
| messageImprint ของการประทับเวลาลายเซ็นแฮชค่าลายเซ็นของ SignerInfo (พื้นผิว B-T ที่อยู่ติดกัน ไม่ใช่ตัวลงนามเหล่านี้) | RFC 3161 | Appendix A |
ทุกข้อเป็นการถอดความ; NextPDF ไม่ได้ทำซ้ำข้อความเชิงบรรทัดฐาน สิ่งเหล่านี้เป็นคำแถลงความสามารถ ไม่ใช่การรับรอง NextPDF ไม่ได้ถือการรับรองใด ๆ และไม่ได้มอบให้ ลายเซ็นที่ผลิตขึ้นจะผ่านการตรวจสอบหรือไม่นั้นเป็นการตัดสินใจของผู้ตรวจสอบเทียบกับ trust anchor และนโยบายของตนเอง; ตัวลงนามคืนค่าไบต์ลายเซ็นและไม่ได้ยืนยันผลลัพธ์ที่เชื่อถือได้ใด ๆ การเก็บรักษาคีย์ การป้องกันคีย์ และการตรวจสอบอัลกอริทึมที่ฝั่งผู้ให้บริการเป็นคุณสมบัติของ KMS ที่กำหนดค่าไว้ ไม่ใช่ของ NextPDF
หมายเหตุการพัฒนา
หัวข้อที่มีชื่อว่า “หมายเหตุการพัฒนา”- ความพร้อมใช้งานภายในแพ็กเกจ Pro:
AwsKmsSignerตั้งแต่ 1.9.0,AzureKeyVaultSignerตั้งแต่ 2.0.0,GcpKmsSignerและKmsSignerInterfaceตั้งแต่ 2.1.0 ทั้งหมดเป็นเวอร์ชันปัจจุบันในnextpdf/pro3.1.0 - ตัวลงนามพึ่งพาเฉพาะ PSR-18, PSR-17 และ PSR-3 เท่านั้น ไม่จำเป็นต้องมีและไม่มีการรวม SDK ของ AWS, Azure หรือ Google มาด้วย
- ตรวจสอบ
supportsAlgorithm()ก่อนการลงนามเพื่อให้ผู้ให้บริการที่ไม่เข้ากันถูกปฏิเสธในเวลาเลือก ไม่ใช่กลางเซสชัน - ฟิลด์ credential ถูกฉีดผ่าน constructor และถูกทำเครื่องหมายเป็นพารามิเตอร์ที่มีความอ่อนไหว ข้อความบันทึกมีเฉพาะฟิลด์เชิงโครงสร้างเท่านั้น; ไม่มีการเขียน credential, token หรือเนื้อหาเอกสารลงในบันทึก
- ปักหมุดเวอร์ชันคีย์อย่างชัดเจนในการติดตั้งที่มีการกำกับดูแล ค่าเริ่มต้นแบบ alias-resolution (AWS) และ latest-enabled (Azure) สะดวกแต่ไม่แน่นอนเมื่อมีการหมุนเวียนคีย์
- ไดรเวอร์ของบุคคลที่สามทำการ implement
KmsSignerInterfaceและต้องกำหนด namespace ให้providerId()ของตนเพื่อหลีกเลี่ยงการชนกันกับตัวระบุในตัวที่สงวนไว้
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- การลงนาม Cloud KMS (ความสามารถ) — หน้าวิธีใช้: การตั้งค่า การกำหนดค่า และขอบเขตการเก็บรักษาคีย์
- ความปลอดภัย — เอกสารอ้างอิงเชิงลึก —
RemoteSigningSession,SequentialSigner, พื้นผิว PAdES B-B/B-T และสัญญาSigningStrategy - ลายเซ็น — เอกสารอ้างอิงเชิงลึก (Enterprise) — ขอบเขตของผู้ผลิตระยะยาว B-LT/B-LTA
- ความปลอดภัย / การลงนาม (Core) — ตัวลงนาม CMS ของ Core และสัญญาที่พื้นผิวนี้ขยาย
ขอบเขตการเผยแพร่
หัวข้อที่มีชื่อว่า “ขอบเขตการเผยแพร่”หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว public API ที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้า ticket อยู่นอกขอบเขต