9

IIS 7.5 で Mercurial をセットアップしようとしています。maxAllowedContentLength属性を無視しているアプリケーション ディレクトリの web.config があり、IIS にそれを受け入れさせることができません! グローバル、ローカル、あらゆるレベルで千通りの方法を試してきました。デフォルトの 30MB で固執し、それよりも大きい変更セットをプッシュすることを拒否します。接続を閉じることさえせず、30MB に達して完全に失速します。タイムアウトの問題ではありません。ローカル マシンからその IP アドレスにプッシュしようとしました。

一体何が起こっているのですか?

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="Python" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="C:\Python27\python.exe -u &quot;%s&quot;" resourceType="Unspecified" requireAccess="Script" />
        </handlers>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="1073741824" />
            </requestFiltering>
        </security>
        <rewrite>
            <rules>
                <rule name="rewrite to hgwebdir" patternSyntax="Wildcard">
                    <match url="*" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="hgweb.cgi/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

    <!-- I don't know if this is supposed to work... it doesn't matter where I put the settings. -->        
    <location path="*">
      <system.web>
        <!-- maxRequestLength is in kilobytes (KB)  -->
        <httpRuntime maxRequestLength="1048576" /> <!-- 1GB -->
      </system.web>
      <system.webServer>
        <security>
          <requestFiltering>
            <!-- maxAllowedContentLength is in bytes (B)  -->
            <requestLimits maxAllowedContentLength="1073741824"/> <!-- 1GB -->
          </requestFiltering>
        </security>
      </system.webServer>
    </location>
</configuration>
4

6 に答える 6

3

この暴言で説明されているように、IIS 7.5 ではmaxAllowedContentLengthinの既定の設定が導入されていMachine.configますWeb.config

これを修正するには、IIS マネージャーを開き、サーバー ノードをクリックして [構成エディター] を選択し、展開system.webServer/security/requestFilteringしてから変更requestLimits/maxAllowedContentLengthします (既定値は 30000000 バイトです)。後で適用をクリックすることを忘れないでください。

于 2014-05-21T12:09:50.947 に答える
3

他の人と同じように、受け入れられた答えは私にはうまくいきませんでした。

アップロードが失敗する理由は、Mercurial と IIS の間でネゴシエートされる暗号スイートの非互換性、特に IIS のデフォルト設定、CBC ベースの暗号スイートの選択に関係しているようです。

Mercurial バージョン 2.9.1 (私がテストしたもの) は、この暗号スイートの順序をサーバーに送信します。RSA 証明書を使用して Windows Server 2008 R2 (および IIS 7.5) でサポートされているスイートは、ここでは太字で示されています。

  • TLS_DHE_RSA_WITH_AES_256_SHA
  • TLS_DHE_DSS_WITH_AES_256_SHA
  • TLS_RSA_AES_256_SHA
  • SSL_DHE_RSA_WITH_3DES_EDE_SHA
  • SSL_DHE_DSS_WITH_3DES_EDE_SHA
  • SSL_RSA_WITH_3DES_EDE_SHA
  • TLS_DHE_RSA_WITH_AES_128_SHA
  • TLS_DHE_DSS_WITH_AES_128_SHA
  • TLS_RSA_AES_128_SHA
  • SSL_RSA_WITH_RC4_128_SHA
  • SSL_RSA_WITH_RC4_128_MD5

それらのうちの 2 つだけが CBC ではありません - RC4 ベースのものです。IIS は、独自の優先順位と Mercurial の優先順位の両方で、それらの前に来るものをすべて選択します。

IISCrypto 1.3 が問題を修正した理由は、 SSL 2 を無効にしたことではないようです (それでもなお良い考えです)。1.4 では、脆弱性が新たに発見されたため、RC4 は再び下に移動しました。

だから...最善の妥協点は、IISのRC4_128_SHAの優先度をAES_256_SHAより上に移動することです。セキュリティの観点から、AES 128 よりも AES 256 のメリットが広く議論されていることに注意してください。

セキュリティに関しては、これはまだすべての ECDHE CBC 暗号を優先します。Mercurial は現時点ではサポートしていませんが、最新のブラウザはすべてサポートしています。Windows XP および Android 2.3 で実行されている IE は、この変更により RC4 を使用することになります - 残りはカバーされています。RC4壊れていますが、それに対する攻撃は簡単ではありません。私の目的のために、私は生き残ると思います。この方法を使用するユーザーは、危険を冒すかどうかについて自分で判断する必要があります。:-)

それはまだ妥協点であり、私はそれについてまったく満足していませんが、少なくとも実行可能な(そして機能する) 妥協点を見つけました。サーバー上でグローバルにではなく、ウェブサイトごとに暗号スイートの順序を選択する方法があれば...

この方向に私を向けてくれた@Sahilに感謝します。

于 2014-03-31T00:34:50.493 に答える
2

私の場合、上記の IISCrypto ソフトウェアにさらに変更を加える必要がありました。

IIS 7.5 とIISCryptoバージョン 1.4 (執筆時点で最新) を使用しています。

「ベスト」または「PCI」プロファイルに変更してもうまくいかなかったので、次のようにしました。

  • プロファイルを Best オプションに戻しました。
  • SSL Cipher Suite Order という名前の左下隅のボックスを探します。
  • すべての CBC ベースの暗号を無効にする/チェックを外す
  • コンピューター/サーバーを再起動します

このスレッドから解決策を見つけ、Zach Masonからの回答が上記のように機能しました。

これが誰かに役立つことを願っています。

于 2014-02-13T14:51:06.327 に答える
2

これは、Python 2.7.3+ の SSL モジュールの非互換性です。

バグは TortoiseHg サイトに記載されていますが、HTTPS 経由で IIS にプッシュするすべてのプラットフォームに適用されます。

https://bitbucket.org/tortoisehg/thg/issue/2593/cant-push-over-30mb-to-iis-via-https

于 2013-05-10T14:29:21.287 に答える
0

maxAllowedContentLength同じセットアップを実行していて、今日属性を追加する必要がありました。
既存の の一番下に挿入したところ、web.configすぐに問題なく動作しました (100MB を超えるコミットで)。

私の完全なweb.config外観は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="Python" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="C:\Python26\python.exe -u &quot;%s&quot;" resourceType="Unspecified" />
        </handlers>
        <rewrite>
            <rules>
                <rule name="rewrite to hgwebdir" patternSyntax="Wildcard">
                    <match url="*" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="hgweb.cgi/{R:1}" />
                </rule>
            </rules>
        </rewrite>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="2147482624" />
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>
于 2013-05-08T08:17:18.453 に答える