我只是使用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上解释。 简而言之:
fullchain.pem和privkey.pem的pem文件 /etc/haproxy/certs 正如您在自己的答案中指定的那样,您需要从LetsEncrypt(LE)获得的fullchain.pem是fullchain.pem和privkey.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作业将永远保持您的证书(假设)。