httpsだったらOKじゃ無い!ATSにやられた😭

はじめに

WKWebViewを使っていてWebサイトを開こうとしたところSSLエラーが返ってきました。

Check website securityでSSLを確認するとDomain Validated (DV)の証明書を保持していましたDVはOV,EVよりもセキュリティレベルが低いものなので最初はこれが原因なのかと考えたのですが、Appleのドキュメントにそのような記載はありませんでした。

SSLサーバ証明書の解説は「SSLサーバー証明書の違い」というサイトがわかりやすかったです。

今回の問題は表示しようとしているサイトの※Cipher suitesにありました。

Cipher suites(暗号スイート)

Cipher suiteは鍵交換アルゴリズム・鍵認証方式・サイファー・メッセージ認証符号の組み合わせで、サーバとクライアントは安全な通信を始める前に使用する暗号スイートを決定します。

SSL/TLS では,ハンドシェイクプロトコルによってサーバとクライアントの双方が利用可能な暗号アルゴリズムを決定します.利用する暗号アルゴリズムは,鍵交換方法(RSA, DHなど),共通鍵暗号アルゴリズム(AES, RC4 など)と暗号動作モード (CBC,GCM など) ,および ハッシュ関数(MD5, SHA1 など)の組み合わで,暗号スイート (Cipher Suite) と呼ばれます.

SSL/TLS プロトコルにおいて,どの暗号スイートを使うかは通信の安全性に大きな影響を及ぼします.そのため,安全性が低い暗号スイートは使わないようにするなど,サーバおよびクライアントにおける適切な設定が必要です.

https://sehermitage.web.fc2.com/crypto/ssl_suite.html

暗号アルゴリズムの組み合わせ(暗号スイート)は以下の形式で表されます。

TLS_[鍵交換]_WITH_[暗号化]_[ハッシュ]

ATSに許可されている鍵、暗号、ハッシュ

Cipher suiteが以下の許可されている暗号での組み合わせである必要があります。

  • ECDHE_ECDSA
  • ECDHE_RSA
  • DHE_RSA
  • RSA

暗号

  • AES_256_GCM
  • AES_128_GCM
  • AES_256_CBC
  • AES_128_CBC

ハッシュ

  • SHA384
  • SHA256
  • SHA

ダメだったサイトのCipher suite(暗号スイート)

私の手元でSSLエラーが返ってきてしまっていたURLの暗号スイートを確認すると以下の形式でした

TLS_RSA_WITH_RC4_128_MD5 (0x0004)
TLS_RSA_WITH_RC4_128_SHA (0x0005)
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000A)
TLS_RSA_WITH_AES_128_CBC_SHA (0x002F)
TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)

RC4やMD5は古く安全では無いようです。アプリエンジニアの対応としてはサイトの所有者にセキュリティに問題がある旨を伝えて治るまではATSを無効にしておくしかなさそうです。

参考文献

NSAllowsArbitraryLoadsInWebContent in UIWebView

[iOS 9] iOS 9 で追加された App Transport Security の概要

 Check website security

TLS/SSL 暗号スイート