我正在运行Let's Encrypt 的SSL 证书。我已经将它们安装在运行 Apache 的 Ubuntu 机器上。设置工作正常,我可以启动网站,查看绿色挂锁,甚至在 SSL Labs 上获得 A+。
问题是当我执行apachectl configtest时,服务器会返回一个文件未找到错误:
SSLCertificateFile: file '/etc/letsencrypt/live/www.example.com/fullchain.pem' not exist or is empty.
但sudo service apache2 restart
工作得很好。
我在Let's Encrypt Community遇到了这个问题,但问题尚未解决。
sudo cat /etc/letsencrypt/live/www.example.com/fullchain.pem
有效,返回有效的证书详细信息。
sudo x509 -text -noout -in /etc/letsencrypt/live/www.example.com/fullchain.pem
不起作用并返回以下错误:
Error opening Certificate /etc/letsencrypt/live/www.example.com/fullchain.pem
139774254929568:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/letsencrypt/live/www.example.com/fullchain.pem.','r')
139774254929568:error:2007402:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
ubable to load certificate
关于为什么我在apachectl configtest和openssl上出现错误的任何想法?
多谢你们!
在我的情况下,文件和权限不是问题。我试图重新启动服务器
apachectl restart
或测试配置(apachectl -t
或apachectl configtest
)。运行命令的用户(我)根本没有访问证书的适当权限。我只需要在命令前面加上前缀就sudo
可以以 root 身份运行它们!没有更多错误,配置测试返回“语法 OK”,我可以重新启动服务器。(好吧,我有点尴尬,我花了这么长时间才弄明白……)经过几个不眠之夜,我终于开始工作了。(矫枉过正的声明)我们都知道这是权限,但究竟在哪里需要检查。
我继续使用/ect/letsencrypt/live以及其下的目录和文件。我不断将权限从原始更改为 0755 和 0777。我没有立即看到的是/etc/letsencrypt/live 是从 /etc/letsencrypt/archive 创建的链接,并且它具有0700权限。这就是它无法读取文件的原因。将/etc/letsencrypt/archive的权限更改为0755后,
apachectl configtest
已经响应Syntax OK
.虽然最初的问题已经解决,但我将把它重新提交给Let's Encrypt,因为这都是证书的自动安装。这样的事情不应该发生在“自动”中。但是我的设置可能与权限问题有关,因为我使用非 root 用户安装它(但我做了 sudo)。
希望这可以帮助某人。
同意timeSmith 的回答,即这些文件和文件夹的权限是故意严格的,应该保留为
0700
.您需要运行
service httpd
或apachectl
命令,sudo
以便这些进程具有 root 权限并获得对letsencrypt 证书文件夹和文件的读取权限。正如Ian Terle最初评论的那样,更改“live”目录的权限现在可以解决问题:
注意:我观察到与 OP 相同的错误。
这得到了证实:
Ubuntu 16.04.2 LTS
Apache/2.4.18 (Ubuntu)
证书文件的权限最好保持非常严格。要允许适当的进程访问证书文件:使用以下命令启动 apache。
交替使用以下命令正常重启: