2

ログインページに spring-security を使用する Cloud Foundry に非常に単純な Grails テストアプリをデプロイしました。

パスワードがクリア テキストで送信されないように、このログイン ページに HTTPS アクセスを要求します。

最初に行ったのは、HTTPS を使用してテスト アプリを参照することでした。これは正常に機能し、Cloud Foundry がアプリの HTTPS 要求を処理できることを確認しました。

次に、自分のページへの HTTPS アクセスを要求するために、Config.groovy に以下を追加しました。

grails.plugins.springsecurity.auth.forceHttps = true

grails.plugins.springsecurity.secureChannel.definition = [
        '/': 'REQUIRES_SECURE_CHANNEL'
]

今、それを使用してデプロイしようとすると、次の場合grails cf-updateにハングしますTrying to start application...

HTTPS の要件を削除すると、成功します。

アプリケーションが起動したかどうかのチェックに問題があるのではないかと推測しています。これは HTTP URL を使用しており、ログに問題が見られないため、HTTPS にリダイレクトされていますか?

何か案は?

4

2 に答える 2

1

現在、CloudFoundry + Spring Security で、HttpServletRequest.isSecure()https を使用すると正しい値が返されないという問題があることがわかりました。これは、安全なチャネルが必要な場合に無限のリダイレクト ループを実行することで、Spring Security よりも優先されます。

単純なSpringプロジェクトでそれを目撃しましたが、これはあなたのgrailsプロジェクトが苦しんでいるものかもしれません. 現時点での 1 つの回避策は、HttpServletRequests をラップisSecure()して、スキームを調べて何を返すかを決定することです。

保護された URL をブラウザーで試してみると、何が得られますか (アプリが実際に開始されたと仮定しますが、grails プラグインは別の方法で通知します)。

于 2012-09-26T15:54:32.847 に答える
0

問題は、cloudfoundry がロードバランサーで HTTPS を終了することです。また、HTTPS をアプリに至るまで取得する方法がないため、「REQUIRES_SECURE_CHANNEL」は cloudfoundry では機能しません。

ユーザーとロードバランサーの間で HTTPS が使用されていることを大規模なハックで確認したい場合は、フィルターのヘッダーを確認できます。例えば。

    sslHeaderRequireFilter(controller:'*', action:'*') {
        before = {
            def headerNames = request.headerNames.collect{ it }             
            if(! headerNames.contains('sslclientcertstatus') ){
                render "Only available on https"
                return false    
            }                   
        }
    }
于 2012-09-27T21:46:10.520 に答える