Skip to content

Apple Push Notification サーバー証明書の更新とトラストストア対応

問題の背景

Apple は 2024 年 10 月 17 日付で Apple Push Notification service (APNs) のサーバー証明書認証局 (CA) を更新することを発表しました:

  • サンドボックス環境: 2025 年 1 月 20 日 から新証明書適用
  • 本番環境: 2025 年 2 月 24 日 から新証明書適用

影響範囲

証明書更新後に開発者が対応しない場合、該当日以降にプッシュ通知の配信が失敗するリスクがあります。Apple は移行期間中に新旧両方のサーバー証明書をトラストストアに含めるよう推奨しています。

主な疑問点:

  • 「アプリケーションのトラストストアを更新」とは具体的に何を指すのか?
  • クライアント iOS アプリ側の修正や再審査は必要なのか?
  • サーバーサイドで直接 APNs に接続している場合の対応は?

必要な対応:環境による違い

ケース1: Firebase Cloud Messaging (FCM) を経由している場合

対応不要

FCM を使用している場合、Google が自動的に証明書更新を対応します。開発者は特にアクションを取る必要はありません。

  • FCM では開発者が直接 APNs に接続しないため
  • Google 側のインフラ更新で解決される
  • サーバーコードの変更や設定更新は不要

ケース2: サーバーから直接 APNs に接続している場合

対応必須

APNs と直接通信するサーバーで、OS のルート証明書を更新する必要があります。

このケースでは以下が重要:

  1. サーバー OS のルート証明書ストアに新 CA が含まれているか確認
  2. 必要に応じて「USERTrust RSA Certification Authority」証明書を追加
  3. 両環境(サンドボックス/本番)で接続テストを実施

具体的な対応手順

ステップ1: 現在の証明書の確認

サーバー上で新ルート証明書が既に存在するか確認:

bash
# Ubuntu/Debian での確認例
ls /etc/ssl/certs | grep USERTrust_RSA_Certification_Authority

# 証明書詳細を表示
openssl x509 -in /etc/ssl/certs/USERTrust_RSA_Certification_Authority.pem -text -noout

ステップ2: 新証明書の追加(必要な場合)

証明書が存在しない場合、手動で追加します:

  1. Apple 公式サイトから証明書をダウンロード https://developer.apple.com/news/?id=09za8wzy

  2. システムの証明書ストアに配置

    bash
    # Ubuntu/Debian 例
    cp USERTrust_RSA_Certification_Authority.crt /usr/local/share/ca-certificates/
    update-ca-certificates

ステップ3: 接続テスト

サンドボックスへの接続を検証:

bash
openssl s_client -connect 17.188.143.34:443 \
  -servername api.sandbox.push.apple.com \
  -verifyCAfile USERTrust_RSA_Certification_Authority.crt \
  -showcerts
コマンド解説
  • -connect: APNs サーバー IP アドレス
  • -servername: SNI(Server Name Indication) の指定
  • -verifyCAfile: 検証用ルート証明書のパス
  • -showcerts: サーバー証明書を表示

成功時の出力例:

Verify return code: 0 (ok)

よくある質問

クライアントアプリ (iOS) を更新する必要はありますか?

いいえ。 macOS や iOS は自動的にシステム証明書を更新します。ユーザーアプリ側で証明書をカスタマイズしていない限り、クライアントのアップデートや App Store 再提出は不要です。

「APNs SSL provider certificates」とは何ですか?

こちらは開発者が APNs に接続するために使用するクライアント証明書を指します。Apple の通知文にある通り、既存のクライアント証明書の更新は不要です。

Apple が提供する証明書と OS 標準の違いは?

Apple が配布する証明書と主要 OS にバンドルされる証明書は同一です。ほとんどのモダン OS(Ubuntu 22.04+, macOS など)は既に新証明書を含んでいます。

リスク回避のためのチェックリスト

  1. サーバーOS のバージョンを確認

    • Ubuntu 20.04 以降 / CentOS 7 以降
    • 古い OS は手動証明書追加が必要
  2. 重要日付をカレンダーに登録

    • サンドボックス移行: 2025-01-20
    • 本番環境移行: 2025-02-24
  3. 検証用テストの実施

    • 開発/ステージング環境での接続テスト
    • 本番移行前に必ず結果確認

Keychain Access での証明書確認例(macOS)

まとめ

  • サーバーから直接 APNs に接続する場合のみ対応が必要
  • 最新 OS 利用で自動対応されることが多いが必ず確認
  • FCM 使用時は修正不要(Google が対応)
  • アプリの再提出やクライアント側変更は基本的に不要
  • 締切日までに検証を完了し通知障害を防止

証明書更新はサーバー管理者が責任を持つ領域です。特にレガシー環境のサーバーほど早期検証が重要です。アップデート情報はApple Developer News で引き続き確認してください。