首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pound + Letsencrypt for Play Framework & AWS CloudFront

Pound + Letsencrypt for Play Framework & AWS CloudFront
EN

Server Fault用户
提问于 2018-02-19 20:08:49
回答 1查看 633关注 0票数 0

背景

我有一个旧的Play Framework,它服务于两个CDN (siteassetscourseassets)的资产,这些资产是用AWS CloudFront实现的。庞德运行在与webapp相同的VM上,只是充当SSL端点,因为使用的旧版本Play框架不处理SSL。英镑与80和443港口绑定。Play webapp绑定到端口9000。

以前,我对CDN资产和webapp使用了赛门铁克SSL通配符证书。现在赛门铁克SSL证书只剩下几天就不再有效了,我决定使用AWS证书管理器为CDN提供单域SSL证书,并使用Letsencrypt为few应用程序提供单域SSL证书。Letsencrypt证书只持续90天,因此需要自动刷新。

庞德想要PEM格式的SSL证书,但Letsencrypt似乎没有提供PEM格式的方便方法。和Apache、Tomcat或其他著名的框架一样,Letsencrypt对Play Framework没有任何特殊的规定。

为了更新庞德使用的SSL证书,我不想让webapp脱机。

电流冲击配置

下面是我当前的庞德版/etc/pound/pound.cfg 2.7f-0ubuntu1。这种配置已经有几年的历史了,可能需要更新,磅也应该更新。

代码语言:javascript
复制
# Global options

User    "root"
Group   "root"

# Logging: (goes to syslog by default)
#  0  no logging
#  1  normal
#  2  extended
#  3  Apache-style (common log format)
#  4 (same as 3 but without the virtual host information)
#  5 (same as 4 but with information about the Service and BackEnd used)
LogLevel 5

# Check backend every X secs:
Alive    30

# Use hardware-accelleration card supported by openssl(1):
#SSLEngine  ""

# poundctl control socket
Control "/var/run/poundctl.socket"

# Redirect all http requests on port 80 to https on port 443
# The Play Framework webapp never sees these redirected requests because Pound handles them
ListenHTTP
  Address 0.0.0.0
  Port 80
  Err500 "/usr/local/etc/pound_error_500"
  Err503 "/usr/local/etc/pound_error_500"
  Service
    Redirect 301 "https://www.scalacourses.com"
  End
End

# Redirect all requests on port 443 to the Play Framework webapp on port 9443
ListenHTTPS
  Address 0.0.0.0
  Port 443
  Err500 "/usr/local/etc/pound_error_500"
  Err503 "/usr/local/etc/pound_error_500"
  Cert "/var/work/training/cadenza/conf/ssl/scalacourses.com.pound.pem"
  Disable SSLv3
  Ciphers "EECDH+ECDSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:ECDH+AES128:ECDH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!eNULL:!LOW:!aNULL:!MD5:!DSS"
  SSLAllowClientRenegotiation     0
  SSLHonorCipherOrder 1
  HeadRemove "X-Forwarded-Proto"
  HeadRemove "x-forwarded-proto"
  AddHeader "x-forwarded-proto: https"
  Service
    BackEnd
      #HTTPS
      Address 127.0.0.1
      Port 9000
    End
  End
End

问题

  1. certbot ACME客户端版本0.17.0是通过:sudo apt install certbot安装的,我看到certbot版本0.21.0是可用的。我应该使用这个更新的版本而不是Ubuntu17.10提供的默认版本吗?
  2. 在Debian中有一个合理版本的磅吗?以前我不得不自己构建庞德,但我更喜欢使用预先构建的版本。https://launchpad.net/ubuntu/+source/pound的版本为2.7-1.3 .这是最好的稳定版本吗?
  3. /etc/pound/pound.cfg中的磅配置需要哪些更改?很明显,这行需要更新:Cert "/var/work/training/cadenza/conf/ssl/scalacourses.com.pound.pem",在更新庞德时,这一行可能需要更新:Ciphers "EECDH+ECDSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:ECDH+AES128:ECDH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!eNULL:!LOW:!aNULL:!MD5:!DSS",可能需要添加、删除或修改哪些其他行?我知道庞德不应该像root那样运行,但这可以单独处理。
  4. 最初需要一个脚本来为磅提供Letsencrypt证书。看起来,Letsencrypt使用的certbot程序想要绑定到端口80,但是庞德绑定到这个端口,我不想为了升级SSL证书而关闭这个SSL应用程序。是否有一种方法可以在与庞德相同的VM上运行它,还是应该在另一个VM上运行它,并在准备就绪时以PEM格式复制生成的证书?
  5. 需要一个脚本,可以通过cron每45天调用一次,以便刷新SSL证书。
EN

回答 1

Server Fault用户

回答已采纳

发布于 2018-02-21 23:36:19

  1. 当前版本的certbot运行良好,不需要最新版本。
  2. 从最近的消息来源来看,仍然不知道预建版本的庞德。
  3. 我只需要更改Cert行,这是有意义的,因为我还没有(还)升级磅。
  4. 脚本可以在任何VM上运行,因为当使用DNS挑战时,脚本不绑定到端口80或端口443。

下面是certbot53,我编写了一个脚本,通过DNS挑战使用jed/certbot-路由53进行身份验证。这个脚本依赖于我提交给certbot-route53的一个D15,它修复了两个bug。

代码语言:javascript
复制
#!/bin/bash

#STAGING=--staging
CERT_DIR=/etc/pound/certbot
DOMAIN=scalacourses.com
MAIL_ADDR='mslinn@scalacourses.com'
SCRIPT_NAME=certbot-route53.sh

if [ ! -d "$CERT_DIR/letsencrypt" ]; then sudo mkdir -p $CERT_DIR/letsencrypt; fi
sudo chmod 777 "$CERT_DIR/letsencrypt"

cd $CERT_DIR

if [ ! -f "$CERT_DIR/$SCRIPT_NAME" ]; then
  sudo curl -sL https://git.io/vylLx -o $SCRIPT_NAME
  sudo chmod a+x certbot-route53.sh
fi

./$SCRIPT_NAME \
  --agree-tos \
  --manual-public-ip-logging-ok \
  --domains $DOMAIN,www.$DOMAIN \
  --renew-by-default \
  --email $MAIL_ADDR $STAGING

PRIV_KEY="$CERT_DIR/letsencrypt/live/$DOMAIN/privkey.pem"
FULL_CHAIN="$CERT_DIR/letsencrypt/live/$DOMAIN/fullchain.pem"
COMBINED="$CERT_DIR/combined-for-pound.pem"
cat "$PRIV_KEY" "$FULL_CHAIN" | sudo tee "$COMBINED" > /dev/null
  1. 目前,我正在通过cron作业重新运行相同的脚本。这意味着我不是在升级证书,而是要替换它们。不清楚升级证书的好处是什么。下面是cron条目,它每两个月将脚本作为我的userid运行一次;在输入sudo crontab -e:0 0 1 */2 * su mslinn /usr/local/bin/certbot53之后,我输入了这个条目
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/897909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档