2017-11-04 5 views
1

ATSに問題があります。 私はXCode 9.1を使用しています。開発ターゲットは11.0です。 私が反応し、ネイティブの0.49App TransportセキュリティブロックHTTPS

を使用して開発しています私のプログラムは、証明書の有効letsencrypt(グーグルクローム)を持つHTTPShttps://www.xxxx.com)リソースへのフェッチを行っています。 フェッチは、NSAllowsArbitraryLoadsがtrueに設定されている場合のみ動作し、falseに設定されている場合、フェッチはブロックされます(デバッグ出力されます)?

一時ドメイン(https://xxxx.no-ip.org)を使用していくつかのテストを行っています。このドメインには、有効な暗号化証明書もあります。この場合、すべて正常に動作します。

私は両方のホストの間で見ることができる唯一の違いは、テストドメインが単一のドメインホストであり、本番ホストがマルチドメインホストであるということです。 誰か提案はありますか?

よろしく、

ハリー


デバッグアウト: CFNetworkは診断[1:1187] 12:38:08.258 { なかった失敗:(ヌル) ローダー:{ URL = https:// .... Error Domain = kCFErrorDomainCFNetwork Code = -1200 "(null)" UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0、_kCFNetworkCFStreamSSLErrorOriginalValue = -9802、_kCFStreamErrorDomainKey = 3、 _kCFStreamErrorCodeKey = -9802}

これは私ののInfo.plistセクション

<key>NSAppTransportSecurity</key> 
    <dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <false/> 
    <key>NSExceptionDomains</key> 
    <dict> 
    <key>xxxx.no-ip.org</key> 
    <dict/> 
    <key>localhost</key> 
    <dict> 
    <key>NSExceptionAllowsInsecureHTTPLoads</key> 
    <true/> 
    </dict> 
    <key>xxxx.com</key> 
    <dict> 
    <key>NSIncludesSubdomains</key> 
    <true/> 
</dict> </dict> </dict> 
+0

( 'https:// www.xxxx.com')の証明書が有効であることをどのように知っていますか? Letsencryptは* .example.comのcertsを発行しません - あなたはxxxx.comだけでなく、www.xxxx.comのものであると確信していますか? –

+0

ChromeとSafariでURLを開きました –

答えて

0

あなたはHTTPS経由で接続しようとしている場合は何もしてはならないNSExceptionAllowsInsecureHTTPLoadsを使用します。あなたのURL(https://www.xxxx.com)がトラフィックをhttp://www.xxxx.comにリダイレクトしている可能性はありますか?

HTTPSトラフィックに影響する他の例外があり、HTTPSのすべての要件(たとえば、転送秘密、TLSバージョン、キーの強さ)を満たさないHTTPS接続が許可されます。あなたがする必要があるのは、それがなぜ失敗しているのかを正確に把握することです。

ATS準拠のURLをテストするには、お使いのMacでnscurl --ats-diagnostics <url>コマンドを使用してください。 ATSについての詳細は、this postの上記のnscurlコマンドの結果の使用方法や解釈方法を参照してください。

さらに、CFNETWORK_DIAGNOSTICSのレベルを変更することで、なぜ失敗したのかを詳しく知るためにログをバンプアップすることができます。その詳細についてはhereをご覧ください。

+0

あなたのアドバイスのためのThx!私はhttpにリダイレクトしない。しかし違いがあります:xxx.no-ip.org(正常に動作します)にはhttpとhttpsでアクセスできます。 www.xxxx.comにはhttpsを介してのみアクセスできます。 –

+0

Macで 'nscurl'コマンドを実行しましたか? – wottle

+0

私はやった - 多くの情報。私は週末にそれを分析して比較するつもりです... –

1

であるあなたの証明書は、Appleが必要とTLSのバージョンのすべての要件に適合しないので、時々、これは起こります。

<key>NSIncludesSubdomains</key> 
<true/> 

それでも解決しない場合は、あなたが最小であるものを見つけることを試みることができます。ドメインhttps://www.xxxx.com

<key>NSExceptionRequiresForwardSecrecy</key> 
<true/> 

とサブドメインを含めることを忘れないでくださいにこれを追加すること

てみてくださいTLSバージョンもサポートします:

<key>NSExceptionMinimumTLSVersion</key> 
<string>TLSv1.2</string> 

すべての過去のものが動作しない、これを追加してみてください:

<key>NSExceptionAllowsInsecureHTTPLoads</key> 
<true/> 
+0

Thx Gabox、私はすでにこれらのパラメータを使用しています。残念ながら成功しません。 certificatは全く新しく(RSA-Encryption付きSHA-256)、私のテストホストのような事実上同じ証明書です。 ChromeとSafariのようなすべての主要ブラウザは、何の問題もなく証明書を受け入れています...その奇妙な... –

+0

あなたのドメインでこれらのどれも動作しない場合は、証明書がAppleの要件に適合しないと言います。 私は、ドメインが一般的な「ForwardSecrecy」の例外を必要とする状況を見ました。 – Gabox

+1

SafariはATSの要件を満たしていなくても証明書を受け入れます。さもなければ、インターネットの半分はSafariでの作業をやめるでしょう。そこには、最小限のATS要件(TLS 1.2以上、前方の秘密、強力なキー)を満たしていない非常に多くのウェブサイトがあります。 – wottle

関連する問題