APNsサーバ証明書更新のメールについて

# はじめに

今朝(2025/02/07)届いた「Action Required: Apple Push Notification Service Server Certificate Update
(Apple Push Notification service (APNs) のサーバ証明書更新)」と題するメールについて解説します。

メールには、APNsの認証局（CA）が変更される旨が記載され、Sandbox環境では2025年1月20日、**Production環境では2025年2月24日に**新しいサーバ証明書（SHA-2 Root：USERTrust RSA Certification Authority certificate）が適用されると案内されています。これに伴い、各自のアプリサーバがAppleのAPNsに接続する際のTrust Storeに新旧両方の証明書が存在することが求められています。

当然ながらプッシュ通知を使っていないアプリは対応が不要です。

# 1. 背景と変更の意図

## APNs証明書の役割
APNsは、プッシュ通知を安全に配信するためのApple提供のサービスです。通知の信頼性を担保するため、APNsは接続時にサーバ側が持つ証明書を用いて暗号化通信を行っています。従来の証明書は、CAの運用や暗号化技術の進展に伴い、より強固なSHA-2系の証明書に切り替える必要が生じました。

## なぜ証明書更新が必要なのか
- セキュリティ向上: 新しいCA（USERTrust RSA Certification Authority）の採用により、APNsとの通信の安全性が向上します。
- 互換性確保: 古い証明書と新しい証明書が混在する環境では、通知配信に失敗するリスクがあるため、信頼できるTrust Store管理が必要となります。
Appleからのメールでは、「旧証明書と新証明書の両方をTrust Storeに登録しておく」よう指示されています。これにより、証明書の切替時に一時的な通信障害を回避できます。

# 2. 対応すべきポイントとスケジュール

## 更新期限
- Sandbox環境: 2025年1月20日
- Production環境: 2025年2月24日

## 対応すべき内容
### Trust Storeの更新:
各アプリサーバでAPNsへ接続する際に使用しているTrust Storeに、【新旧両方のサーバ証明書】が登録されているか確認します。これにより、証明書切替期間中もプッシュ通知の配信が中断されないようにします。

### APNs SSLプロバイダ証明書の変更は不要:
現時点では、Appleが発行したAPNs SSLプロバイダ証明書の更新は不要とされています。つまり、アプリサーバ側でTrust Storeの更新に注力してください。

### 各環境の確認:
Sandbox、Productionそれぞれにおいて、接続しているサーバのTrust Storeに証明書が正しく追加されているか、テスト環境での動作確認を実施します。

# 3. Trust Storeへの証明書追加と運用上の注意点

## Trust Storeとは
Trust Storeは、サーバやクライアントが信頼する証明書の集合体です。APNsに接続する際、通信相手の証明書がこのTrust Storeに含まれていなければ、通信が拒否される可能性があります。

## 対応手順
### 1. 新証明書のダウンロード:
Apple Developerサイトやメールに記載されている情報をもとに、新しいサーバ証明書（SHA-2 Root：USERTrust RSA Certification Authority certificate）をダウンロードします。

### 2. Trust Storeへの登録:
サーバ側で利用しているOSやミドルウェア（例：Javaの場合はcacerts、Linuxの場合は/etc/ssl/certsなど）に、新証明書を追加します。具体的な手順は、利用する環境ごとに異なります。
例えば、Linux環境であれば以下の手順が参考になります：
- 新証明書をPEM形式で保存
- システムの証明書ストアにコピーし、更新コマンド（例：update-ca-certificates）を実行
### 3.新旧証明書の共存確認:
移行期間中は、古い証明書と新しい証明書が両方Trust Storeに存在していることが重要です。これにより、証明書更新中に古い証明書に対して接続しているクライアントと新しい証明書を用いるクライアントが混在しても、通信が継続されます。
### 4.運用テスト:
更新後は、Sandbox環境およびProduction環境でプッシュ通知の送信テストを実施し、通知が正しく配信されることを確認してください。
注意点
### 5.自動更新ツールの確認:
サーバ環境で自動でTrust Storeが更新される場合、更新スケジュールに合わせたメンテナンスが必要な場合があります。例えば、DockerイメージやCI/CDパイプラインで利用している場合は、最新のベースイメージに含まれる証明書群を確認してください。
### 6.バックアップの確保:
Trust Storeの変更前に、既存の証明書のバックアップを取得しておくと、万が一のトラブル時に迅速な復旧が可能です。
### 7.通知配信の監視:
証明書更新後、しばらくは通知配信状況を監視し、万一エラーが発生した場合に迅速に対応できるようにログの確認やモニタリング体制を整えておきましょう。

# Q&A
## プッシュ通知が届かなくなるリスクはあるのか？

Appleからの通知にもある通り、APNsサーバの証明書がSandbox環境では2025年1月21日、Production環境では2025年2月24日に更新されます。
この更新期間中、各アプリサーバがAPNsに接続する際、サーバ証明書の内容が古いものと新しいものとで混在する可能性があります。
そのため、各サーバのTrust Storeに「旧サーバ証明書」と「新サーバ証明書」の両方を登録しておくことが必須となります。
この対策を怠ると、証明書検証に失敗してAPNsへの接続が確立できず、結果としてプッシュ通知が届かなくなる「事故」が発生するリスクがあります。
なお、今回の更新で対象となるのはAPNsのサーバ証明書であり、Appleが発行するAPNs SSLプロバイダ証明書については更新不要です。

## Device Tokenはどうなるのか？
APNsから取得するdevice tokenは、アプリがインストールされた各デバイスごとに発行される一意の識別子です。
Appleの公式ドキュメントでも、device tokenは以下のような理由で変化する可能性があるとされています。

- OSのアップデートやアプリの再インストール時： ユーザーのデバイス環境が変わると、tokenが新たに発行される場合があります。

- 初回登録後の再認証： APNsサーバとの接続条件やネットワーク環境により、tokenが更新される可能性があるため、サーバ側は常に最新のtokenを保持するように設計すべきです。

ただし、APNsのサーバ証明書更新そのものが直接device tokenの更新を引き起こすことは通常ありません。
証明書更新作業に伴い、接続に失敗した場合は通知が届かなくなるリスクはありますが、token自体は既存のtokenが引き続き利用されるのが一般的です。

## SHA-2 Root：USERTrust RSA Certification Authority certificateって何?

USERTrust RSA認証局証明書は、Sectigo社が発行するルート証明書で、インターネット上の安全な通信を確立するための信頼の基盤となります。この証明書は、ウェブサイトやサービスのSSL/TLS証明書の信頼性を検証する際に使用され、ユーザーとサーバー間のデータ通信を暗号化し、第三者からの盗聴や改ざんを防止します。特に、Appleのプッシュ通知サービス（APNs）では、サーバー証明書の更新に伴い、アプリケーションのTrust Storeにこの証明書を含めることが推奨されています。

この証明書は、RSA暗号化アルゴリズムを用いた4096ビットの公開鍵を含んでおり、インターネット上での安全な通信を確立するために、データの暗号化やデジタル署名の検証に利用されます。その他、証明書の有効期間、シリアル番号、発行者情報、証明書の使用目的などが含まれています。


 ## Trust Storeって何？
Trust Store（トラストストア）とは、システムやアプリケーションが信頼する認証局（CA）のルート証明書や、中間証明書などの信頼できる証明書群を格納したリポジトリです。
SSL/TLSなどのセキュアな通信では、接続先が提示する証明書チェーンがこのトラストストア内の証明書によって検証され、通信の安全性が確保されます。

たとえば、APNsに接続するアプリサーバの場合、APNsサーバが提示する証明書が正しいかどうかを判断するため、Trust Storeに登録された証明書と照合されます。
このため、APNsのサーバ証明書が更新された際は、アプリサーバのTrust Storeに新しい証明書を登録しておかないと、検証に失敗し接続が拒否される恐れがあります。

## p8を使っているなら対応不要ですか？

p8ファイルを使ったトークンベースのAPNs認証では、証明書ベースの認証を利用しないですが、今回のサーバ証明書更新はhttpsの証明チェーンを実現するためのルート証明書なのでTrust Storeの更新や関連の対応は必要です。(2025/02/09訂正。@daikimatさんご指摘ありがとうございます。)

# まとめ

Appleからのメールで案内されたAPNsのサーバ証明書更新は、セキュリティ向上と信頼性維持のための措置です。対応としては、各アプリサーバで使用しているTrust Storeに【新旧両方の証明書】が含まれていることを確認することが最重要です。今回の変更は、SandboxとProductionそれぞれに適用されるため、環境ごとにテストを実施し、トラブル発生時に迅速に対応できる体制を整えることが求められています。Productionの対応期限が2025年2月24日なので、慌てず対応できるように作業スケジュールを確認しましょう！