如何为我的bluemix应用程序强制执行SSL?

时间:2014-09-08 23:39:43

标签: node.js ssl ibm-cloud

我注意到,当我启动应用程序时,我可以使用http://或https://访问SSL。但是,我想确保我的用户只使用https ...有没有办法总是重定向到https?

4 个答案:

答案 0 :(得分:2)

您可以这样做,但这取决于您的编程语言。我将在下面的Node.JS中发布一个示例。基本上你需要做的是检查“x-forwarded-proto”标题,如果它是http,则通过https重定向到你的应用程序。

var middleware = module.exports,
    url = require("url");

var HTTP = "http:",
    HTTPS = "https:";

middleware.transportSecurity = function () {

    var applicationURL = "https://myapp.bluemix.net/"
        scheme = url.parse(applicationURL).protocol;

    function securityEnabled () {
        if (scheme !== HTTP && scheme !== HTTPS) {
            throw new Error(
                "The application URL scheme must be 'http' or 'https'."
            );
        }
        return scheme === HTTPS;
    }

    function redirectURL (request) {
        return url.resolve(applicationURL, request.originalUrl);
    }

    return function (request, response, next) {
        if (securityEnabled() && !request.secure) {
            response.redirect(301, redirectURL(request));
        }
        else {
            next();
        }
    };

};

app.js

...
middleware = require("./middleware"),

app.use(middleware.transportSecurity());
...

让我知道您正在使用的编程语言,我也可以为此发布一个示例。

答案 1 :(得分:2)

受到jssloyer blog post关于该主题的启发(他在上面的答案中总结了这一点),我写了一篇名为 Redirecting HTTP to HTTPS with Node.js & Express on IBM Bluemix 的帖子,我提供了一个方法略有不同。使用Express,我打开trust proxy,然后让Express框架对x-forwarded-proto标题进行分析。

我还有一个可以部署的sample on GitHub

答案 2 :(得分:0)

我对我的应用程序也有类似的疑问,我使用下面的代码,这对SSL实现工作正常:

function sslneed(req, res, next) {
if (req.headers && req.headers.$wssc === "80") {
return res.redirect('https://' + req.get('host') + req.url);
}
next();
}
app.use(sslneed);

你需要专门看看$ WSSC。

答案 3 :(得分:0)

Bluemix代理服务器终止SSL,因此所有流量看起来都像是应用程序的HTTP。但是,代理还会添加一个名为$ WSSC的特殊HTTP标头,其值为http或https。只需检查此标题,如果值设置为http,则重定向到您网页的https版本。

我认为编写Liberty Profile实现request.getScheme()是为了检查这个相同的标题,所以Ram的答案可能是在Liberty上做的首选方法。

更新:现在也设置了X-Forwarded-Proto标头。

有关详细信息,请参阅https://developer.ibm.com/answers/questions/8617/how-to-tell-if-my-application-was-requested-using-ssl/?community=bluemix