コンテンツにスキップ
getnextpdf.com

TSA の設定

NextPDF がタイムスタンプ局(TSA)に接続するのは、PAdES B-T 以上で署名する場合のみです。B-B ではタイムスタンプもネットワーク呼び出しもないため、このページは B-B 署名には適用されません。

B-T をそのまま動作させるため、NextPDF には組み込みのデフォルト TSA が同梱されています。このデフォルトは利便性のためのものであり、追加の設定なしにタイムスタンプ付き署名を成功させられるようにします。これは公的に信頼されるものではなく、eIDAS 適格でもありません。そのため、明確な選択を経ずに本番環境やコンプライアンス用途で使用するのは適切ではありません。このページでは、デフォルトが正確には何であるか、NextPDF を自分の TSA に向ける方法、タイムスタンプを無効にする方法、そして 2 つのアップグレード経路を説明します。

次の 3 つの性質は互いに独立しており、混同してはなりません。

  • セルフホスト型 — サーバーを誰が運用するか、およびその証明書がどのルートにチェーンするか。
  • 公的に信頼される — 関係者が利用する検証エコシステム(そのトラストストアまたはトラストリスト)が、手作業のセットアップなしに、すなわちプライベートルートを手動でインストールする必要なしに、そのルートをすでに信頼しているかどうか。これは関係者のトラストアンカーに関する事柄であり、Web PKI のような特定の単一プログラムに関するものではありません。
  • eIDAS 適格 — そのタイムスタンプが EU 内で適格な法的効力を持つかどうか。

同梱されているデフォルトはセルフホスト型のみです。公的に信頼される TSA は 2 つ目の性質を追加します。eIDAS 適格 TSA はさらに、EU トラステッドリストを通じて検証される適格な法的地位を持ち、サードパーティの QTSP によって運用される場合があります。これら 3 つの性質は互いに独立しており、一方が他方を含意することはありません。

デフォルトのエンドポイントは https://timestamp.pateon.com.tw であり、NextPDF 自身の RFC 3161 タイムスタンプサーバーです。これはセルフホスト型であり、そのタイムスタンプユニット証明書は、公的なトラストプログラムではなくプライベートな PATEON ルートにチェーンします。したがって関係者は、その PATEON ルートをアウトオブバンドでインストールして信頼していない限り、デフォルトが発行したタイムスタンプを検証できません。

RFC 3161 トークンは、主張された時刻が正しいことを示す外部の証拠を一切持たないため、 そのようなタイムスタンプへのトラストは、発行元の TSA を信頼することに完全に依存します (ISO/IEC 18014-2 §7.3)。同梱のデフォルトでは、そのトラストアンカーはプライベートであり、これがデフォルトがコンプライアンスグレードのものではなく、利便性および開発用のデフォルトである理由です。

デフォルトのエンドポイントが使用されており、かつフレームワークにロガーが設定されている場合、NextPDF はプロセス開始時に、デフォルトが公的に信頼されていない旨を示し、この設定を案内する一度限りの警告を出力します。この警告は情報提供のためのものであり、署名は引き続き成功します。

TSA エンドポイントは、フレームワークアダプターの設定で指定します。正確なキーはアダプターごとに異なります(フレームワーク別設定の表を参照)。 Laravel では NEXTPDF_TSA_URL 環境変数、Symfony では nextpdf.tsa.url バンドルノード、 CodeIgniter では nextPdf.tsa.url 環境キーです。

有効な TSA は、次の優先順位(上が最優先)で解決されます。

  1. 明示的に構築して自分で注入する TsaClient — これは常に優先されます。
  2. アダプターで設定された URL — クライアントを注入しない場合に使用されます。
  3. 組み込みのデフォルト — 上記のいずれも設定されていない場合にのみ使用されます。
Terminal window
# Laravel (.env): use your own publicly-trusted TSA instead of the shipped default.
NEXTPDF_TSA_URL=http://timestamp.digicert.com

アダプターの TSA url をデフォルト(未設定)のままにしておくと、組み込みのデフォルトエンドポイントが維持されます。その url を空の値に設定するのはこれとは異なり、 タイムスタンプを無効にします。TSA が設定されていない状態では、B-T 以上で要求された署名は、B-B へ暗黙的に格下げされるのではなく、「TSA required」エラーとともにフェイルクローズします。

Terminal window
# Laravel (.env):
# NEXTPDF_TSA_URL unset -> use the built-in default (timestamp succeeds against pateon).
# NEXTPDF_TSA_URL empty -> no TSA; a B-T+ request fails closed.
NEXTPDF_TSA_URL=

RFC 3161 タイムスタンプ要求は messageImprint — タイムスタンプ対象データのハッシュ — を運びます。NextPDF はデフォルトでこのインプリントに SHA-256 を使用します。このデフォルトは意図的で相互運用性の高い選択であり、変更が必要になることはめったにありません。

TsaClient を手作業で構築する場合、imprintHashAlgorithm コンストラクター引数を通じて別のインプリントダイジェストを選択できます。この引数は TsaImprintHashAlgorithm のケースを取ります:Sha256(デフォルト)、Sha384Sha512Sha3_256Sha3_384、または Sha3_512 です。デフォルトは発行されるすべての要求を以前のリリースとバイト単位で同一に保つため、明示的に選択しない限り、アップグレードしても何も変わりません。

use NextPDF\Security\Timestamp\TsaClient;
use NextPDF\Security\Timestamp\TsaImprintHashAlgorithm;
// Default — SHA-256 imprint, unchanged from earlier releases:
$tsa = new TsaClient('https://timestamp.example.com/tsa');
// Opt in to a stronger imprint digest:
$tsa = new TsaClient(
'https://timestamp.example.com/tsa',
imprintHashAlgorithm: TsaImprintHashAlgorithm::Sha512,
);

デフォルトから外れる前に知っておくべき制約が 2 つあります。

  • エコシステムのサポートは現時点では SHA-256 です。 SHA-256 以外のインプリントは Core のトークン検証器とは相互運用できますが、nextpdf-server の PAdES B-T 証明ゲートおよび Premium の検証ダイジェストマップは、現時点では SHA-256 のインプリントのみを認識します。したがって、異なるインプリントダイジェストで構築された署名タイムスタンプは、それらのサーフェスではまだ B-T を証明できません。タイムスタンプのすべての利用者が、 選択したダイジェストを受け入れることが分かっている場合を除き、デフォルトを維持してください。
  • 事前計算されたダイジェストはアルゴリズムと一致しなければなりません。 getDocumentTimestamp() はすでに計算済みの文書ハッシュを取ります。そのハッシュの長さが設定されたインプリントアルゴリズムと一致しない場合、不一致の要求を送信するのではなく、 ネットワーク呼び出しの前にフェイルクローズします。

開発用途や内部用途を超えるあらゆる場合には、デフォルトを次の 2 つのより強力な選択肢のいずれかに置き換えてください。

アダプターの TSA url を、関係者がすでに信頼している公的ルートに証明書がチェーンする TSA に向けます — 例えば http://timestamp.digicert.com です。プライベートルートを配布する必要はありません。本番グレードの TSA は通常、ETSI EN 319 421 §5 のようなタイムスタンプポリシーへの適合を表明し、ETSI EN 319 422 §7 に記述された RFC 3161 プロトコルプロファイルに従います。公的信頼だけからそれを前提とするのではなく、運用者が公開しているポリシーに照らして確認してください。

欧州連合内で適格な法的効力を持たなければならないタイムスタンプには、EU トラステッドリストに掲載された適格トラストサービスプロバイダー(QTSP)が提供する適格タイムスタンプサービスを使用してください。適格電子タイムスタンプは、検知できない改変を合理的に防止できるように時刻をデータに結び付け、協定世界時にリンクされた正確な時刻源に基づき、QTSP の高度電子署名もしくは高度電子シール、または同等の方法によって保護されます (Regulation (EU) 910/2014, Art 42)。これは最も強力な選択肢であり、規制が適格タイムスタンプを明示的に指名している場合に選ぶべきものです。

デフォルトは、コアエンジンではなく各フレームワークアダプターの設定に存在します。コアが URL を作り出すことは決してありません。手作業で構築する TsaClient は明示的なエンドポイントを必要とし、それが空の場合はスローします。長期レベル(B-LT および B-LTA)は、 B-T と同じ設定済みの TSA を再利用します。

統合デフォルトの所在オーバーライド方法
Laravelconfig/nextpdf.php -> tsa.url.envNEXTPDF_TSA_URL を設定する
Symfonyバンドル設定 nextpdf.tsa.urlノードを設定するか、環境変数にバインドする
CodeIgniterConfig\NextPdf::$tsa['url']nextPdf.tsa.url 環境キーでオーバーライドする
Plain core暗黙のデフォルトなし明示的な URL と堅牢化された PSR-18 クライアントとともに TsaClient を構築する

どのアダプターでも、B-B は TSA クライアントを決して構築しません。そのため、タイムスタンプの付かない署名は、これらの設定のいずれにも影響を受けません。

タイムスタンプの価値は、バイト列そのものではなく、その背後にあるトラストチェーンです。 RFC 3161 トークンは時刻を主張するだけであり、その主張が信頼できるかどうかは、それに署名した TSA の性質です(RFC 3161 §2、ISO/IEC 18014-2 §7.3)。同梱のデフォルトを維持する場合、 あなたはセルフホスト型のプライベートトラストアンカーを選んでいることになります — すべての関係者が PATEON ルートをインストールできる開発用途や内部ワークフローには適していますが、 サードパーティによって検証される文書には適していません。そうした文書には、公的に信頼される TSA へ移行するか、適格な法的効力が求められる場合には eIDAS 適格 TSA へ移行してください。

デフォルトを自分自身で運用する場合は、自分で注入する PSR-18 クライアント内で TSA の公開鍵をピン留めできます。共有コードの中で同梱のデフォルトをピン留めしてはいけません。運用者側で鍵がローテーションされると、すべてのデフォルト利用者が一度に動作しなくなるからです。 タイムスタンプにおけるトラストは、証明書チェーンと PATEON ルートであり、トランスポートのピン留めではありません。