TT Lab
はじめる
学ぶ 学習パス コース

統合とデプロイ

401と403、そして証明書

TT Labで続きを見る

目標

401と403を手がかりに、認証問題の層を絞り込み、証明書の失敗モードをファイルから直接確認できるようになります。

なぜ重要なのか

401は認証の失敗です。「あなたが誰なのか確認できない」。403は認可の失敗です。「誰なのかはわかったが、これはできないことになっている」。この区別が、調査の方向を正反対に分けます。401なら認証情報そのものを見て、403なら認証情報には手を付ける必要なく、権限の設定を見ます。「権限エラー」とひとまとめにすると、見当違いの方向を何時間も掘ることになります。

そして、401の中でも理由が分かれます。トークンなし、不明なトークン、期限切れのトークンは、すべて401ですが、対応が異なるので、応答本文の理由の文字列も一緒に見る必要があります。

証明書のほうでは、2つを確認します。期限切れはnotAfterで見ますが、このとき、現在時刻も一緒に表示する必要があります。時計が間違っているクライアントで、問題のない証明書が期限切れに見えることが、かなり多いからです。名前の不一致は、CNではなくSANを見る必要がありますが、このラボの証明書はCNしか持っていないので、サブジェクト名で確認します。

トークン4種類: (헤더 없음)(韓国語で「ヘッダーなし」を意味します)、expired-token-2025、readonly-token、fde-prod-2026 証明書2つ: /opt/data/tls/expired.pem、/opt/data/tls/wronghost.pem(接続しようとしていた名前はapi.customer.example)

ステップ

  1. /opt/app/authapi.pyを実行して、127.0.0.1:8003/publicが200を返すようにしてください。
  2. Authorizationヘッダーなしで/privateを呼び出したステータスコードを、/root/auth/no_token.txtに書いてください。
  3. expired-token-2025で/privateを呼び出した応答本文を、/root/auth/expired_reason.txtに保存してください。
  4. readonly-tokenで/privateを呼び出したステータスコードを、/root/auth/readonly.txtに書いてください。
  5. fde-prod-2026で/privateを呼び出したステータスコードを、/root/auth/ok.txtに書いてください。
  6. expired.pemの有効期限を、/root/auth/cert_expiry.txtに保存してください。
  7. wronghost.pemのサブジェクト名を、/root/auth/cert_cn.txtに保存してください。
  8. /root/auth/report.mdに、401と403の違い、そして2つの証明書の問題をまとめてください。2つのステータスコードと、api.other.example、有効期限の年が含まれている必要があります。

参考

認証ゲートウェイを起動する

/opt/app/authapi.pyを実行して、127.0.0.1:8003/publicが200を返すようにしてください。

/opt/app/authapi.pyを実行すると、127.0.0.1:8003で待ち受けます。/publicは認証なしで開かれています。

トークンなしで呼び出してみる

Authorizationヘッダーなしで/privateを呼び出したステータスコードを/root/auth/no_token.txtに書いてください。

Authorizationヘッダーなしで/privateを呼ぶと、どのコードが来るかを記録してください。

期限切れの理由を確保する

expired-token-2025で/privateを呼び出した応答本文を/root/auth/expired_reason.txtに保存してください。

期限切れのトークンも401です。ステータスコードだけでは理由がわからないので、応答本文を保存してください。

権限不足を確認する

readonly-tokenで/privateを呼び出したステータスコードを/root/auth/readonly.txtに書いてください。

readonly-tokenは、身元確認は通過します。そのときに出るコードが、401とどう違うかを見てください。

正常な認証を確認する

fde-prod-2026で/privateを呼び出したステータスコードを/root/auth/ok.txtに書いてください。

fde-prod-2026のトークンなら通過します。成功のコードを記録してください。

期限切れの証明書を確認する

expired.pemの有効期限を/root/auth/cert_expiry.txtに保存してください。

openssl x509で、証明書の有効期間を見られます。有効期限がいつかを保存してください。

名前が異なる証明書を確認する

wronghost.pemのサブジェクト名を/root/auth/cert_cn.txtに保存してください。

wronghost.pemのサブジェクト名を取り出してください。接続しようとしていた名前とは違います。

診断レポートを書く

/root/auth/report.mdに、401と403の違い、そして2つの証明書の問題をまとめてください。2つのステータスコードと、api.other.example、有効期限の年が含まれている必要があります。

401と403がそれぞれ何の失敗なのか、そして2つの証明書の問題が何なのかを、まとめてください。