1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS SAPの更新ついでに相互TLSについて確認してみた

1
Last updated at Posted at 2026-02-14

相互TLSとトラストストア(Trust Store)

本記事では、mTLS(相互認証)の鍵となる概念 「トラストストア(Trust Store)」 の仕組みについての説明と、AWSのALB(Application Load Balancer)を用いた動作検証を行います。

1. トラストストアとは何か

トラストストアは、一言で言えば 「通信を許可する相手を判定するための、信頼できる認証局(CA)の証明書リスト」 です。

  • 通常のTLS(サーバー認証) : クライアント(ブラウザ等)が、サーバーから提示された証明書を、自身の持つトラストストア(OSやブラウザに標準搭載されたパブリックCAリスト)で検証します。
  • 相互TLS(mTLS) : サーバー側も、クライアントから提示された証明書を、サーバー側が管理するトラストストアで検証します。

2. 「証明書バンドル(PEMファイル)」の作り方

トラストストアの実体は、多くの場合「PEM形式のテキストファイル」です。複数のCAを信頼する場合、1つのファイルに複数の証明書を連結(バンドル)して使用します。

  • 形式: Base64エンコードされたASCIIテキスト(-----BEGIN CERTIFICATE----- で始まるもの)
  • 連結ルール: 1つのファイル内に、以下の順序でテキストを貼り付けます。
    1. 中間CA証明書(複数ある場合は、下位のCAから順に)
    2. ルートCA証明書
  • 注意点: 自身の「クライアント証明書」そのものは含めません。あくまで「署名者(親)」のリストを作成します。

3. mTLSの主なユースケース

  • IoTデバイス接続 (AWS IoT Core): 工場のセンサーや車載デバイスなどの機密性の高い認証。
  • クライアントVPN (AWS Client VPN): 証明書ベースの強固なデバイス認証。
  • サービスメッシュ (App Mesh / Istio): マイクロサービス間通信における認証と暗号化。
  • B2B API連携: 特定のパートナー企業間のみで通信を許可するAPI。

4. 【実機検証】ALBでmTLSの挙動を確認する

ALBのmTLS機能を利用して、証明書を持たないリクエストがブロックされることを確認します。

手順1:プライベートCAとクライアント証明書の作成(OpenSSL)

検証用に、自分自身の認証局(CA)を立てて証明書を発行します。以下のステップで計6つのファイルが生成されます。

① 認証局(CA)の作成

# 1. 認証局の秘密鍵を作成
openssl genrsa -out rootCA.key 2048

# 2. 認証局の公開証明書(ルート証明書)を作成
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem -subj "/CN=MyPrivateCA"

② クライアント証明書の作成

# 3. クライアントの秘密鍵を作成
openssl genrsa -out client.key 2048

# 4. 署名要求(CSR)の作成
openssl req -new -key client.key -out client.csr -subj "/CN=MyClient"

# 5. CAの鍵を使って署名し、クライアント証明書を発行
openssl x509 -req -in client.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out client.crt -days 500

生成される全6ファイルの役割まとめ

一連のコマンドで以下のファイルが手元に揃います。

ファイル名 役割 扱い・用途
rootCA.key CAの秘密鍵 最重要機密。署名にのみ使用し、他者には渡さない。
rootCA.pem CAの公開証明書 AWSのトラストストアにアップロードする。
rootCA.srl シリアル番号管理ファイル -CAcreateserialにより自動生成。CA内部の管理用。
client.key クライアントの秘密鍵 接続検証(curl)で使用。 クライアント側で秘匿。
client.csr 証明書署名要求 証明書を発行するための一次ファイル。発行後は不要。
client.crt クライアントの公開証明書 接続検証(curl)で使用。 ALBへ提示する。

手順2:AWSへの設定

  1. rootCA.pem をS3バケットにアップロードします。
  2. EC2コンソールの「ロードバランシング」>「トラストストア」メニューから、S3上のファイルを指定してトラストストアを作成します。
  3. ALBのHTTPSリスナー設定で 「相互TLS(mTLS)」 を有効にし、作成したトラストストアを紐付けます。

手順3:接続検証

① 証明書なしでアクセス(拒否されることを確認)

curl -ik https://your-alb-domain.com
  • 結果: curl: (56) Recv failure: Connection reset by peer 等のリセットが発生。アプリケーション(バックエンド)に到達する前にALBが遮断します。

② 正しい証明書でアクセス(通過することを確認)

curl -ik https://your-alb-domain.com --key client.key --cert client.crt
  • 結果: HTTP/2 200 が返り、設定した固定レスポンスやターゲットグループからの応答が確認できます。

5. おわり

今回はAWS SAPの更新時に気になった、相互TLSとトラストストアの仕組みについてまとめてみました。
今回は設定が比較的簡単そうなALBで試しましたが、APIGatewayでもALB同様S3からバンドルをインポートして設定するようです。
image.png

この記事がどなたかの参考になれば幸いです。

6.参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?