Skip to content
Latchkey

PEM ファイルとは?解説

PEM ファイルは、暗号データ、つまり鍵や証明書を、人間が読める BEGIN と END のマーカーの間に base64 として包むテキストコンテナです。

PEM は、鍵や証明書のファイルを開くときにほぼ必ず目にする形式です。ダッシュの行と「BEGIN CERTIFICATE」で始まるあのブロックが PEM です。PEM はプレーンテキストなので設定ファイルや secret を通じて簡単に移動でき、まさにそれが CI パイプラインが TLS 証明書、署名鍵、アプリの資格情報にそれを頼る理由です。

PEM ファイルとは何か

PEM(Privacy Enhanced Mail、その起源に由来する名前)は、バイナリの暗号データを取り、base64 エンコードし、何を含むかを示すヘッダー行とフッター行の間に包むテキストエンコーディングです。下層のバイナリは通常 DER エンコードされており、PEM はそれをテキストセーフにするだけです。

BEGIN と END のマーカー

各 PEM ブロックは、内容、つまり証明書、公開鍵、秘密鍵を名付ける BEGIN と END のマーカーのような行で区切られます。単一の .pem ファイルは複数のブロックを保持でき、たとえば証明書に続いてそのチェーンを含められます。マーカーはツールに各ブロックの解釈方法を伝えます。

PEM ファイルが保持するもの

PEM は 1 つの特定のものではなくコンテナです。TLS 証明書、証明書チェーン、公開鍵、秘密鍵を保持できます。それらを区別するのはマーカーのテキストです。だからこそ単一の PEM 取り扱いの習慣が、多くの CI 資格情報のシナリオをカバーします。

CI における PEM ファイル

一般的なパターンは、PEM 資格情報、たとえば GitHub App の秘密鍵や TLS クライアント証明書を CI secret として保存し、それをツールが消費できるよう job 内でファイルに書き戻すことです。PEM はテキストなので secret としてきれいに保存されますが、その改行を保持することが重要で、さもないとツールが拒否します。

Writing a PEM secret to a file
# Restore a PEM private key from a secret in CI
steps:
  - run: |
      printf "%s" "${{ secrets.APP_PRIVATE_KEY }}" > app.pem
      chmod 600 app.pem

Latchkey に関する注記

PEM の secret は、GitHub ホスト runner と同様に Latchkey runner でもログ内でマスクされます。制限的なパーミッションで PEM 鍵を job 内のファイルに書き込むことが、それを露出させずに CLI へ渡す標準的な方法です。

重要なポイント

  • PEM ファイルは、base64 の暗号データを BEGIN と END のマーカーの間に包むテキストコンテナです。
  • 証明書、証明書チェーン、公開鍵、秘密鍵を保持でき、どれかはマーカーが示します。
  • CI は PEM 資格情報をテキストの secret として保存し、ツールが使えるようファイルへ書き戻します。

関連ガイド