TLSのセキュリティ
iOS、iPadOS、およびmacOSは、Transport Layer Security(TLS 1.0、TLS 1.1、TLS 1.2、TLS 1.3)およびDatagram Transport Layer Security(DTLS)に対応しています。TLSプロトコルは、AES128とAES256の両方をサポートし、前方秘匿性を持つ暗号スイートを優先します。Safari、カレンダー、メールなどのインターネットアプリは、自動的にこのプロトコルを使用して、デバイスとネットワークサービス間の暗号化された通信チャネルを有効にします。ハイレベルAPI(CFNetworkなど)を使うことで、TLSをアプリに簡単に導入できるほか、低レベルAPI(Network.frameworkなど)を使ったきめ細かい制御も可能です。CFNetworkはSSL 3の使用を許可せず、WebKitを使用するアプリ(Safariなど)はSSL 3接続の確立が禁止されます。
iOS 11以降およびmacOS 10.13以降では、SHA-1証明書はユーザが信頼しない限りTLS接続に使用できなくなりました。RSA鍵が2048ビット未満の証明書の使用も禁止されました。iOS 10およびmacOS 10.12では、RC4対称暗号スイートが非推奨になっています。デフォルトでは、SecureTransport APIを使って実装されたTLSクライアントまたはサーバで、RC4暗号スイートが無効になっているため、RC4が唯一の暗号スイートの場合は、接続できません。セキュリティを強化するため、RC4を必要とするサービスまたはアプリをアップグレードして安全な暗号スイートを使えるようにする必要があります。iOS 12.1において、2018年10月15日以降に発行されたシステム信頼済みのルート証明書は、TLS接続に使用できるように信頼されたCertificate Transparencyログとして記録されている必要があります。iOS 12.2では、Network.framework APIとNSURLSession APIでTLS 1.3がデフォルトで有効になります。SecureTransport APIを使用するTLSクライアントは、TLS 1.3を使用できません。
App Transport Security
アプリ Transport Securityはデフォルトの接続要件を規定します。NSURLConnection、CFURL、またはNSURLSessionの各APIの使用時に、アプリがベストプラクティスに従って安全に接続できるようになります。デフォルトでは、App Transport Securityは暗号化方式の選択肢を、前方秘匿性を持つ以下の暗号スイートのみに限定しています。
Galois/Counter Mode(GCM)でのECDHE_ECDSA_AESおよびECDHE_RSA_AES
CBC(暗号ブロック連鎖)モード
アプリはドメインごとに前方秘匿性の要件を無効にできます。この場合、利用可能な暗号化方式にRSA_AESが追加されます。
サーバはTLS 1.2と前方秘匿性をサポートしている必要があり、2048ビット以上のRSA鍵または256ビット以上の楕円曲線鍵を用いたSHA256以上を使って署名された有効な証明書も必要です。
アプリがアプリ Transport Securityを無効にしている場合を除き上記の要件を満たさないネットワーク接続は失敗します。証明書が無効な場合は必ず失敗し、接続は確立されません。アプリ Transport SecurityはiOS 9以降およびmacOS 10.11以降向けにコンパイルされたアプリに自動的に適用されます。
証明書の有効性チェック
TLS証明書の信頼評価は、RFC 5280に定められた確立済みの業界標準に従って行われ、RFC 6962(証明書の透明性)などの新しい標準規格も採用されています。iOS 11以降およびmacOS 10.13以降のAppleデバイスでは、失効および制限されている証明書の最新リストが定期的にアップデートされます。このリストは、Appleが信頼する組み込み済みの各ルート認証局とその下位の認証局が公開する証明書失効リスト(CRL)から生成されます。このリストには、Appleの判断によるその他の制限が含まれる場合もあります。安全な接続を確立するためにネットワークAPIが使用されるときは、常にこの情報が参照されます。認証局が個別にリストする失効済みの証明書が多すぎる場合は、信頼評価にオンライン証明書状況プロトコル(OCSP)の応答が必要になることがあり、この応答が得られないと信頼評価は失敗に終わります。