如何在Heroku上部署安全(HTTPS)Meteor应用程序?

时间:2016-09-06 11:49:01

标签: ssl meteor heroku https ssl-certificate

我想将我的Meteor应用程序部署到Heroku,并且只能通过HTTPS访问它。理想情况下,我希望尽可能便宜地做到这一点。

1 个答案:

答案 0 :(得分:7)

创建证书

运行这些命令以获取certbot-auto。 certbot-auto应该适用于大多数系统

wget https://dl.eff.org/certbot-auto
chmod 755 certbot-auto

此命令启动获取证书的过程。 -d标志允许您传入您想要保护的域。或者,如果没有-d标记,它会弹出一个提示,您可以在其中输入域名。

./certbot-auto certonly --manual -d app.yoursite.com

然后会问你以下内容。不要输入。

Make sure your web server displays the following content at                                                      
http://app.yoursite.com/.well-known/acme-challenge/SOME-LENGTHY-KEY before continuing:

SOME-LONGER-KEY

使用选择器

我建议使用此方法,因为在续订时,您只需要更新环境变量。您可以使用public/,如下所示,但每次都需要重建整个应用

运行meteor add meteorhacks:picker

在服务器端文件中,添加以下内容

import { Picker } from 'meteor/meteorhacks:picker';

Picker.route('/.well-known/acme-challenge/:routeKey', (params, request, response) => {
  response.writeHead('200', {'Content-Type': 'text/plain'});
  response.write(process.env.SSL_PAGE_KEY)
  response.end();
});

然后使用

将环境变量SSL_PAGE_KEY设置为SOME-LONGER-KEY
heroku config:set SSL_PAGE_KEY=SOME-LONGER-KEY

使用public /

public文件夹中创建目录路径。如果你没有,请创建一个。

mkdir -p public/.well-known/acme-challenge/

然后创建文件SOME-LENGTHY-KEY并在其中放置SOME-LONGER-KEY

echo SOME-LONGER-KEY > public/.well-known/acme-challenge/SOME-LENGTHY-KEY

提交并推送更改到您的Heroku应用程序。

git push heroku master

现在按Enter键继续验证过程。你应该收到这样的消息

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/app.yoursite.com/fullchain.pem. Your cert will
   expire on 2016-04-11. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.

上传证书

要将证书上传到Heroku,请先启用SSL Beta

heroku labs:enable http-sni -a your-app
heroku plugins:install heroku-certs

然后将您的fullchain.pemprivkey.pem添加到Heroku。

sudo heroku _certs:add /etc/letsencrypt/live/app.yoursite.com/fullchain.pem /etc/letsencrypt/live/app.yoursite.com/privkey.pem

您可以使用

验证证书是否已上传
heroku _certs:info

更改DNS设置

更新您的DNS以指向app.yoursite.com.herokudns.com

验证SSL是否正常工作

要检查是否已设置SSL,请运行以下命令。 -v为您提供详细输出。 -I仅显示文档信息。 -H将标头传递给网址。我们传递的标头确保不使用缓存,并确保您获得新证书而不是旧证书。

curl -vI https://app.yoursite.com -H "Cache-Control: no-cache"

检查输出是否包含以下内容

* Server certificate:
*    subject: C=US; ST=CA; L=SF; O=SFDC; OU=Heroku; CN=app.yoursite.com

如果subject行不包含CN=app.yoursite.com,请等待5到10分钟再试一次。如果确实如此,你几乎可以走了。

进行流星特定更改

要完成此过程,您需要将ROOT_URL环境变量更改为新的https版本。

heroku config:set ROOT_URL=https://app.yoursite.com

然后,您要确保您的用户始终使用带有force-ssl包的SSL

meteor add force-ssl

最后,如果您在应用中设置了任何OAuth登录信息(Facebook,Google等),则您需要为其提供新的https版本的网址。

更新

再次运行certbot-auto

./certbot-auto certonly --manual -d app.yoursite.com

可能提示您输入具有相同内容的相同端点。如果是,只需按Enter键。如果没有,则需要重复上述步骤。

然后它将创建新的证书文件,您将使用

上传到Heroku
heroku certs:update /etc/letsencrypt/live/app.yoursite.com/fullchain.pem /etc/letsencrypt/live/app.yoursite.com/privkey.pem

然后确认,运行上面的验证SSL正在运行命令

来源