web-dev-qa-db-ja.com

Amazon S3 SSLエラーからのiOS 9アプリのダウンロード:TLS 1.2サポート

私は得る

SSLエラーが発生し、サーバーへの安全な接続を確立できません。

iOS 9でAmazon s3からファイルをダウンロードしようとした場合: https://s3.amazonaws.com/xyz/qer/IMG_0001.JPG

私が理解しているAmazon s3がTLS 1.2をサポートしていることから、以下を参照してください: https://forums.aws.Amazon.com/thread.jspa?threadID=192512

S3およびKinesisは、現時点でTLS 1.2をサポートしています。 enter image description here

「現時点では、S3とKinesisはTLS 1.2をサポートしています。」 2015年8月23日午後9時19分

その後、なぜこのSSLエラーが発生するのかわかりません。アカウントはTLS 1.2を利用するように構成する必要がありますか?これはデフォルトで「オン」になっているはずです。

このドメインをinfo plistに入れたくありません。

編集:私は使用してしまいました

<key>NSAppTransportSecurity</key> 
<dict> 
  <key>NSExceptionDomains</key> 
  <dict> 
    <key>s3.amazonaws.com</key> 
    <dict> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
        <false/> 
      <key>NSIncludesSubdomains</key> 
        <true/> 
    </dict> 
  </dict> 
</dict>
42
Zsolt

2016-01-03を編集:s3.amazonaws.comの更新された証明書はSHA256アルゴリズムを使用し、ATS要件に準拠しています。

元の回答:s3.amazonaws.comは、ATS要件を満たさないSHA1証明書を使用しているため、ハード障害が発生します。 App Transport Security Technote により、iOS9のATSには次の要件があります。

  1. サーバーは、少なくともTransport Layer Security(TLS)プロトコルバージョン1.2をサポートする必要があります。

  2. 接続暗号は、前方秘匿性を提供するものに限定されます。つまり、

    TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

  3. 証明書は、2048ビット以上のRSAキーまたは256ビット以上の楕円曲線(ECC)キーのいずれかで、SHA256以上の署名ハッシュアルゴリズムを使用して署名する必要があります。

証明書が無効な場合、ハード障害が発生し、接続できなくなります。

SSL LabsのSSLサーバーテスト( https://www.ssllabs.com/ssltest/analyze.html?d=s3.amazonaws.com )には、iOS 9のATSのハンドシェイクシミュレーションが含まれています。 s3.amazonaws.comの障害。

Dev SSL Labs

39
Anand Bhat

IOS 9アプリを正常にSSLエンドポイントに到達させるには、2つのことが必要です(S3は単なる例です)。

  • サーバーで有効になっている前方秘密( https://www.wikiwand.com/en/Forward_secrecy ).

    この機能は現在AWS S3ではサポートされていません。そのための回避策は、S3バケットの前にAWS CloudFrontサービス(FSをサポート)を構成できることです。設定はかなり簡単です。 CORSを使用している場合、CloudFrontプロキシを介して適切なヘッダーを渡す必要があることに注意してください。

  • サーバー上のSHA-256で保護されたSSL証明書。

    Cloudfrontを介してファイルを使用可能にした後、URL( https://somethinghashed1234wasdfawer421.cloudfront.net )を押すと、そこのSSL証明書がSHA-1を使用していることがわかります。どれだけ悪いのか...そのための解決策は、プライベートなSHA-256 SSL証明書でこれを保護することです。そのためには、ドメインのCloudfrontエンドポイントにCNAMEを指定する必要があります。これにより、独自のSSL証明書でバケットを保護できます。 DNSを設定して、cloudfront-bucket.mydomain.comがそのい何かhashed1234wasdfawer421.cloudfront.netを指すエントリを持つようにします。 SSL証明書をAmazonにアップロードし、Cloudfront配布設定でSSL保護を設定します。出来上がり!

言及されていることはすべて、AWSコンソールから簡単にクリックできます(SSL証明書のアップロードは別として、AWS CLIを介して行う必要があります)。

12
mieciu

現在、S3は完全に準拠していないため、AWSブログの this post によると、公式の推奨事項は、このキーセットをInfo.plist

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSExceptionDomains</key>
      <dict>
            <key>amazonaws.com</key>
            <dict>
                  <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                  <string>TLSv1.0</string>
                  <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                  <false/>
                  <key>NSIncludesSubdomains</key>
                  <true/>
            </dict>
            <key>amazonaws.com.cn</key>
            <dict>
                  <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                  <string>TLSv1.0</string>
                  <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                  <false/>
                  <key>NSIncludesSubdomains</key>
                  <true/>
            </dict>
      </dict>
</dict>

PDATE 10/27/15: Polがコメントで指摘しているように、これはAWSからの公式の回答ですが、Apple Engineer in サポートフォーラム は、これは実際にはバグだと言います:

NSExceptionRequiresForwardSecrecyがSHA-2/256要件を緩和するという事実はバグです。 NSExceptionRequiresForwardSecrecyの意図される動作は、App Transport Security Technoteに記載されている動作です。つまり、特定の暗号スイートを有効にするだけです。

私たちの計画は、将来のある時点でこのバグを修正することです。互換性のある方法でこれを修正する予定ですので、NSExceptionRequiresForwardSecrecyを誤って使用してSHA-2/256要件を無効にしたユーザーは壊れません。ただし、将来を予測することは常に課題です。それはあなたが今すべきことに私たちをもたらします。 [この投稿の以前のバージョンでは、具体的なアドバイスは少なかった。以下は、物事を引き締める更新です。] ATS Engineeringとこれについて議論した後、私たちの推奨事項は次のとおりです。

特定のホスティングサービスを使用している場合は、ホスティングサービスに相談して最新のアドバイスを入手してください。

サーバーがSHA-2/256証明書署名要件を除きATSと完全に互換性があるこのような状況では、NSExceptionAllowsInsecureHTTPLoadsを使用してその状態を正確に文書化することをお勧めします。

サーバーをできるだけ早くATSと完全に互換性のあるものにするようにしてください。

その場合は、より安全なATS設定でアプリを更新する必要があります。

NSExceptionAllowsInsecureHTTPLoadsは実際には安全ではないことを強調する必要があります。 iOS 8で実行しているときのアプリと同じくらい安全です。むしろ、ATSが提供する追加のセキュリティの恩恵を受けないことを意味します。共有して楽しむ

強調鉱山。現在の計画では壊れないこの問題を解決するためにNSExceptionRequiresForwardSecrecyを使用した人の振る舞いでバグを修正することになっていることに注意してください。 。

11
markquezada

Amazonの証明書の問題は、SHA-1を使用していることと、アプリトランスポートセキュリティにSHA-2/256が必要であることを指摘するために投稿するだけです。

NSExceptionRequiresForwardSecrecyが機能するという事実は、 Apple dev forums に記載されているバグです。ドキュメントとAppleリンクされたスレッドのエンジニアによると、「より良い」ソリューションは

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>s3.amazonaws.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict> 
    </dict> 
</dict>

私は「より良い」という用語を非常に大雑把に使用し、Appleは最終的に修正されるバグを行使しないソリューションのみを意味します。現在、これは証明書の問題のみの修正です:)

6
tmeisenh

Amazonが* ssから頭を出すまで、@ Zsoltがplistファイルに次のキーと値を挿入するよう提案した。

ただし、NSExceptionDomainをs3.amazonaws.comではなくamazonaws.comに設定してくださいアセットの提供方法と、Amazonがサービスを提供する地域によって異なりますs3-us-west-1.amazonaws.com。したがって、サブドメインを明示的に設定しないと、AWSリージョン識別子からアセットを適切に提供できます。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>amazonaws.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>
1