我有一个有效的letsencrypt证书,供apache服务器使用。
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mydomain.com
SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
此证书使用 certbot 自动更新:
sudo ls /etc/letsencrypt/mydomain.com/live/ -al
lrwxrwxrwx 1 root root 41 Dec 31 08:46 fullchain.pem -> ../../archive/mydomain.com/fullchain8.pem
lrwxrwxrwx 1 root root 39 Dec 31 08:46 privkey.pem -> ../../archive/mydomain.com/privkey8.pem
Apache 在 www-data 用户帐户下运行。
www-data 6452 0.0 0.4 472056 41852 ? S 01:44 0:11 /usr/sbin/apache2 -k start
我还有一个需要使用此证书的 Web 套接字服务器。当我使用 www-data 用户运行 Web 套接字服务器时,出现以下错误:
RuntimeException:来自 tcp://127.0.0.1:46714 的连接在 TLS 握手期间失败:无法完成 TLS 握手:SSL_R_NO_SHARED_CIPHER:无法使用合适的共享密码。这可能是因为服务器缺少 SSL 证书(local_cert 上下文选项)...
这基本上意味着它无法访问证书。如果我将 fullchain8.pem 和 privkey8.pem 文件复制到 www-data 可以访问错误更改的另一个位置(但这是另一个问题:))。
我知道将私钥文件复制到 www-data 可以访问的地方是个坏主意,而且我绝对不希望 Web 套接字服务器以 root 权限运行。所以我的问题是,我怎样才能访问证书?阿帕奇似乎知道它的方式。