我决定将 monit 放在运行 centos 7 的 vps 上。我已经在服务器上安装了 let's encrypt 并且安装了证书。我想将 monit 指向 fullchain.pem 或 cert.pem,但我收到此错误。
Dec 30 00:56:52 [23926]: The SSL server PEM file
'/etc/letsencrypt/live/example.com/fullchain.pem' must have permissions no more than -rwx------ (0700); right now permissions are -rw-r--r-- (0644).
Dec 30 00:56:52 monit[23926]: /etc/monitrc:131: SSL server PEM file permissions check failed 'allow'
Dec 30 00:56:52 systemd[1]: monit.service: main process exited, code=exited, status=1/FAILURE
不确定如何继续。我是否要更改证书文件的所有者?我是否要更改运行 monit 的所有者?
答案1
Monit 非常奇怪,因为它期望将私钥和 TLS 证书链连接到由 指定的单个文件中pemfile
,因此如果不进行进一步处理,您就无法使用通过 certbot 检索到的证书。
您需要设置一个部署钩子在 certbot 中将证书合并到一个文件中并设置该文件的权限。
示例脚本可能如下所示:
#!/bin/bash
for domain in $RENEWED_DOMAINS
do
case $domain in
example.com)
cat $RENEWED_LINEAGE/privkey.pem $RENEWED_LINEAGE/fullchain.pem > /etc/monit/pemfile-$domain.pem
chmod 600 /etc/monit/pemfile-$domain.pem
;;
done
然后用 续订certbot renew --deploy-hook '/path/to/that/script.sh'
。
并在 monit 中指定pemfile /etc/monit/pemfile-example.com.pem
最后,您可以使用 certbot renew 之类的命令使用更新的证书重新启动 monit --post-hook 'systemctl restart monit'
...
答案2
作为Monit v5.27.0,发布于 2020-06-29,您现在可以传入指向 Let's Encrypt 生成的单独文件的 pemchain 和 pemkey 参数。引用自文档:
作为备选宝链和彭姆凯设置单独的 PEM 编码证书链和私钥文件的路径。密钥文件应存储在文件系统上的安全位置,并且应具有严格的权限,不超过 0700。
...
使用单独的证书链和密钥的示例:
set httpd port 2812 with ssl { pemchain: /etc/ssl/certs/monit.chain.pem pemkey: /etc/ssl/certs/monit.key.pem } allow myuser:mypassword
也可以看看:公关 #78。