HAProxy:使用Let's EncryptconfigurationSSL

我只是使用Let's Encrypt生成一个新的SSL证书。 现在我正在尝试configurationHAProxy。

这些是文件夹和证书:

700 archive |--------> 755 company.cxx |------------> 644 fullchain.pem |------------> 644 cert.pem |------------> 644 (etc.) 

现在,这些是archive文件夹中证书的文件夹和软链接的权限:

 700 live |--------> 755 company.cxx |------------> 777 fullchain.pem |------------> 777 cert.pem |------------> 777 (etc.) 

HAProxyconfiguration如下:

 frontend public bind :80 bind :443 ssl crt /etc/letsencrypt/live/company.cxx/fullchain.pem 

而错误是这样的:

 Proxy 'public': no SSL certificate specified for bind ':443' at [/etc/haproxy/haproxy.cfg:12] (use 'crt'). Fatal errors found in configuration. 

我不知道权限是否是问题,但是我担心哪个是HAProxy的正确方法。 我会感谢你的帮助。

编辑:只是为了testing,我试图复制证书到/etc/haproxy但没有奏效。

解决scheme在DigitalOcean上解释。 简而言之:

  • 创build一个连接fullchain.pemprivkey.pem的pem文件
  • 将该新文件移动到/etc/haproxy/certs
  • configurationHAProxy

正如您在自己的答案中指定的那样,您需要从LetsEncrypt(LE)获得的fullchain.pemfullchain.pemprivkey.pem的连接版本。

但是每次证书过期时手动运行LE客户端就会失败使用LE的目的。 另外,如果您的HAProxy实例已经在其他网站的端口80上侦听,则无法在独立模式下使用LE客户端。

或者,您可能对此HAProxy ACMEvalidation插件感兴趣。

该插件利用HAProxy的Lua API允许HAProxy使用由ACME客户端提供的token / key-auth文件来应对validation挑战到指定的目录。

从本质上讲,HAProxy会将所有匹配众所周知的ACMEvalidationpath的请求发送给一个LUA插件,该LUA插件会自动回答请求的任何域的请求。 您还有一个定期检查证书过期的cron作业设置,并在过期之前自动更新它们。 因此,您唯一的手动步骤是请求域的初始证书,并将PEM参考添加到您的HAProxyconfiguration文件。 在此之后,cron作业将永远保持您的证书(假设)。