Azure WebサイトのSSL 3.0問題

いろいろありましたがDavid Ebbo先生がAzure WebサイトでSSL 3.0をオフにする方法を用意してくれました。(正確にはオフではなく拒否ですが)

やりかたは2パターンあります。とりあえずSSL 3.0が有効な状態を見ときましょう。(curlでやるとクールだけどIEでとりあえず。)

image

image

TLSがOnだとそっち使っちゃうので一時的に。で、Azure Webサイトにつないで見ます。

image

こんな感じでSSL 3.0です。サイトは普通に見えます

image

 

1. Disable SSLv3 Extensionを使う

KuduにアクセスしてSite ExtensionsでDisable SSLv3をインストールします。

image

プレビューポータルだともう少し簡単です。(わざわざKuduにつながなくても良い)

image

簡単です。プレビューポータルだと再起動もされるので簡単ですね。ではブラウザでつないで見ましょう。

imageimage

403になりました。TLS有効にするとちゃんと見えます。

※ちなみにこのExtension有効にすると、Extension消しても403になっちゃう気がします。。

 

2. URLRewriteを使う

もう1つの方法として提示されたのがURLRewriteを使う方法です。Azure Webサイトのフロントエンドのロードバランサーが、クライアントがSSL 3.0を要求してきたときに X-Forwarded-SSLv30 という特別なリクエストヘッダを付与してくれるので、こちらを見て判断する方法です。

image

(TLSで接続している場合などはこのリクエストヘッダが付与されません)

以下のようなルールをWeb.configに追記します。

<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Block SSL3.0" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTP_X_FORWARDED_SSL30}" pattern="1" />
</conditions>
<action type="CustomResponse" statusCode="403" subStatusCode="900" statusReason="Forbidden" statusDescription="SSLv3 connections are forbidden by this site" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

こんな感じになります。

image

Web.configだけで設定のOn/Offできるので、こちらのほうが使い勝手がいいかもです。(但しステータスコードが例だと403になるだけなので注意 ※CustomErrorsとか設定してないとという話)

クラウドサービスや仮想マシンについては以前書いた通りです。

SSL 3.0が完全に使われてない技術であればWebサイトもホスト側ですぱっとオフにできるのでしょうけど、そうじゃないクライアントがあるのでサービス側としてはこのような形でエラーにさせる方向なのでしょうね。
完全にクライアントの問題とも言えませんがクライアント側で少なくともSSL3.0使わなければ良いはずですので、サーバー側でどうするかは状況によりけりということでしょうか。(少なくとも現状は)

あ、ちなみにモバイルサービスもKudu使えるはずなので、同じ手段で対策できるかと思います。

追記

URLRewriteでSSL3.0接続のときに403を返しつつカスタムエラーでユーザーにSSL3.0の無効化を促すようにする場合はこんな感じにすると良さそうです。

カスタムエラー用のCSHTML

@{
  Response.StatusCode = 403;
}
<!DOCTYPE html>
<html>
<body>
 <h1>SSL 3.0を無効にしてTLSを有効にしてください</h1>
</body>
</html>

Web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="webpages:Enabled" value="true" />
  </appSettings>
    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <httpErrors errorMode="Custom">
      <remove statusCode="403" />
      <error statusCode="403" path="/403.cshtml" responseMode="ExecuteURL" />
    </httpErrors>
    <rewrite>
      <rules>
        <rule name="TestBlock" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" />
    <conditions>
   <add input="{HTTP_X_FORWARDED_SSL30}" pattern="1" />
    </conditions>
          <action type="CustomResponse" statusCode="403" subStatusCode="900" statusReason="Forbidden" statusDescription="SSLv3 connections are forbidden by this site" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

結果

image

静的ファイルだとステータスコードが200に上書きされるようなので、CSHTMLで強制的に403を返すようにするようです。

たけぱらさんありがとうございます。

これでSSL3.0の時はエラー扱いにして且つユーザーに注意を促すことができますね。

※ ただ結局SSL3.0で繋いじゃってるので脆弱な状態といえば脆弱です。注意しましょう。まぁ注意を促したりするための対応なのでクライアント側で気を付けましょうね。ということです。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中