暗号技術における X.509 証明書の発行

LinuxBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、現代のデジタルセキュリティの礎石である X.509 証明書の作成と管理の実践的な側面を探求します。X.509 証明書は、公開鍵を個人やサーバーなどのアイデンティティに結びつけるデジタル文書であり、Web トラフィックの保護のための TLS/SSL などのプロトコルに不可欠なものです。

強力なopensslコマンドラインツールを使用して、必須の証明書管理タスクを実行する方法を学びます。まず証明書の構造を理解し、次に開発目的で自己署名証明書を作成します。その後、証明書署名要求(CSR)を生成し、簡易的な認証局(CA)として機能してそれを署名し、ご自身のシステム内で信頼された証明書を作成します。

この実験(Lab)の終わりまでに、証明書のライフサイクルについて確固たる実践的な理解を得られるでしょう。

X.509 証明書の概要

このステップでは、X.509 証明書の基本的な理論について説明します。ここでは実行するコマンドはありません。このセクションは、実践的なタスクを開始する前の理解を深めるためのものです。

X.509 証明書は、信頼を確立するために不可欠な情報を含む標準化されたデジタル文書です。その主要な構成要素には以下が含まれます。

  • Subject(サブジェクト): 証明書の所有者のアイデンティティ(例:個人、www.example.comのようなサーバー名)。
  • Issuer(発行者): アイデンティティを確認し、証明書に署名したエンティティ(認証局、CA)。
  • Public Key(公開鍵): サブジェクトの秘密鍵に対応する公開鍵。
  • Validity Period(有効期間): 証明書が有効である期間(Not Before および Not After)。
  • Signature(署名): 証明書の真正性を保証する発行者のデジタル署名。

自己署名証明書は、発行者とサブジェクトが同一である特殊な種類の証明書です。本質的に、証明書がそれ自身に署名します。これらの証明書は、既知の CA によって検証されていないため、パブリックブラウザやシステムからは信頼されませんが、クライアントとサーバーの両方を制御する内部テスト、開発環境、またはプライベートネットワークでは非常に有用です。

次のステップでは、独自の自己署名証明書を作成します。

自己署名証明書の作成

このステップでは、自己署名証明書を作成します。プロセスを簡略化するため、~/project ディレクトリ内に private.pem という名前の秘密鍵がすでに生成されています。この鍵を使用して証明書を生成します。

openssl req コマンドは、証明書要求の作成と処理に使用されます。使用するフラグの内訳を見てみましょう。

  • -new: 新しい証明書要求を生成します。
  • -x509: 証明書要求の代わりに自己署名証明書を出力します。
  • -key private.pem: 使用する秘密鍵を指定します。
  • -out cert.pem: 証明書の出力ファイル名を指定します。
  • -days 365: 証明書の有効期間を 365 日に設定します。
  • -subj "...": サブジェクト情報を非対話的に提供します。

次に、ターミナルで次のコマンドを実行して証明書を作成します。

openssl req -new -x509 -key private.pem -out cert.pem -days 365 -subj "/C=US/ST=California/L=Mountain View/O=MyOrg/CN=example.com"

このコマンドは出力を行いませんが、新しいファイルが作成されます。現在のディレクトリ内のファイルをリスト表示することで、cert.pem ファイルが作成されたことを確認できます。

ls

出力には、事前に生成されたファイルと共に cert.pem が表示されるはずです。

ca-key.pem  ca.pem  cert.pem  private.pem

証明書詳細の表示

このステップでは、作成したばかりの自己署名証明書の内容を確認します。これにより、その詳細を確認し、人間が読める形式でその構造を理解することができます。

証明書ファイルを表示および操作するために設計された openssl x509 コマンドを使用します。

  • -in cert.pem: 入力証明書ファイルを指定します。
  • -text: 証明書の全詳細をテキスト形式で出力します。
  • -noout: 証明書のエンコードされたバージョンを出力しないようにします。

cert.pem の詳細を表示するには、次のコマンドを実行します。

openssl x509 -in cert.pem -text -noout

出力はかなり長くなりますが、スクロールして以下の主要なフィールドに注目してください。

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ...
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, ST = California, L = Mountain View, O = MyOrg, CN = example.com
        Validity
            Not Before: ...
            Not After : ...
        Subject: C = US, ST = California, L = Mountain View, O = MyOrg, CN = example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    ...
                Exponent: 65537 (0x10001)
...

Issuer フィールドと Subject フィールドが同一であることに注目してください。これが自己署名証明書の決定的な特徴です。

証明書署名要求 (CSR) の生成

このステップでは、証明書署名要求 (CSR: Certificate Signing Request) を生成します。CSR は、公開鍵と識別情報を含むエンコードされたテキストブロックです。署名付きデジタル証明書を要求するために、CSR を認証局 (CA: Certificate Authority) に送信します。

再び openssl req コマンドを使用しますが、今回は -x509 フラグを付けないため、自己署名証明書ではなく CSR が生成されます。

  • -new: 新しい要求であることを示します。
  • -key private.pem: 既存の秘密鍵を使用します。
  • -out csr.pem: CSR の出力ファイル名を指定します。
  • -subj "...": 要求する証明書の識別情報を提供します。

架空の Web アプリケーションの CSR を生成するには、次のコマンドを実行します。

openssl req -new -key private.pem -out csr.pem -subj "/C=US/ST=New York/L=New York City/O=MyWebApp/CN=webapp.example.com"

このコマンドは csr.pem という名前の新しいファイルを作成します。ls コマンドでその作成を確認できます。

ls

これで、プロジェクトディレクトリ内に csr.pem が表示されます。

ca-key.pem  ca.pem  cert.pem  csr.pem  private.pem

この CSR は、署名のために CA に送信する準備ができました。

CSR への署名

この最終ステップでは、認証局 (CA) として機能し、前のステップで作成した CSR に署名します。この目的のために、環境内には単純な CA 証明書 (ca.pem) とそれに対応する秘密鍵 (ca-key.pem) が事前に生成されています。

CSR を処理し、新しい証明書を発行するために、openssl x509 -req コマンドを使用します。

  • -req: CSR を処理していることを指定します。
  • -in csr.pem: 入力 CSR ファイル。
  • -CA ca.pem: 署名に使用される CA の証明書。
  • -CAkey ca-key.pem: 署名に使用される CA の秘密鍵。
  • -out signed-cert.pem: 新しく署名された証明書の出力ファイル。
  • -days 365: 有効期間を設定します。
  • -CAcreateserial: CA が発行された証明書を追跡するために必要なシリアル番号ファイル (ca.srl) を作成および管理します。

CSR に署名するには、以下のコマンドを実行します。

openssl x509 -req -in csr.pem -CA ca.pem -CAkey ca-key.pem -out signed-cert.pem -days 365 -CAcreateserial

署名が成功したことを確認する出力が表示されます。

Certificate request self-signature ok
subject=C = US, ST = New York, L = New York City, O = MyWebApp, CN = webapp.example.com

次に、ファイルを一覧表示して、新しく作成された証明書 signed-cert.pem とシリアルファイル ca.srl を確認します。

ls
ca-key.pem  ca.pem  ca.srl  cert.pem  csr.pem  private.pem  signed-cert.pem

この新しい証明書は、openssl x509 -in signed-cert.pem -text -noout で検査できます。Issuer が CA (CN=myca.com) になり、Subject が CSR からの識別情報 (CN=webapp.example.com) になっていることに気づくでしょう。

まとめ

この実験 (Lab) では、openssl ツールを使用して X.509 証明書の基本的なライフサイクルについて実践的な経験を積みました。

以下のことを習得しました。

  • X.509 証明書の主要な構成要素と自己署名証明書の概念を理解する。
  • openssl req を使用して、開発およびテストに適した自己署名証明書を作成する。
  • 証明書の詳細を検査し、openssl x509 でその内容を確認する。
  • CA から正式に証明書を要求するために証明書署名要求 (CSR) を生成する。
  • 単純な認証局 (CA) として機能し、CSR に署名して新しく有効な証明書を発行する。

これらのスキルは、システム管理、ネットワークセキュリティ、またはソフトウェア開発に関わるすべての人にとって不可欠であり、さまざまなアプリケーションで安全な通信を管理するための基盤を提供します。