我为我的 lighttpd 网络服务器创建了以下文件以用于 https 连接:
$ ls -al /etc/lighttpd/ssl
drwxr-xr-x 2 root root 4096 Oct 21 12:51 .
drwxr-xr-x 4 root root 4096 Oct 20 16:04 ..
-rw-r--r-- 1 http http 1663 Oct 20 15:49 server.crt
-rw-r--r-- 1 root root 1062 Oct 20 15:48 server.csr
-rw------- 1 root root 1704 Oct 20 15:48 server.key
-rw-r----- 1 alarm http 3367 Oct 20 16:02 server.pem
-rw------- 1 root root 1751 Oct 20 15:48 rootCA.key
-rw-r--r-- 1 root root 1330 Oct 20 15:48 rootCA.pem
-rw-r--r-- 1 root root 41 Oct 20 15:49 rootCA.srl
server.*
我的明显的网络服务器文件和文件在哪里rootCA.*
是我用来创建自签名证书的证书颁发机构 (CA) 文件(https://alexanderzeitler.com/articles/Fixing-Chrome-missing_subjectAltName-selfsigned-cert-openssl/)。为了让 lighttpd 使用我的证书 (crt),我需要创建 pem 格式的文件,但这样做:
sudo cat server.crt server.key > server.pem
制作 pem 格式的文件。我将 rootCA.pem 文件安装到 Chrome 中(这样它就可以识别 CA,而不会抱怨网站“不安全”)。
我的问题是
- 从安全角度来看,我的文件权限是否正常,或者我应该将所有者/组和文件权限更改为其他权限?
- /etc/lighttpd/ssl 目录权限如何?
- 我必须
sudo cat server.crt server.key > server.pem
通过将我的添加到 pem 文件中来执行上述命令,这是否会通过使该文件可被 http 读取server.key
而暴露我的私钥?server.pem
由于运行 lighttpd 的用户是“http”,因此我的 server.pem 必须可以被我的 lighttpd 服务器读取。
答案1
这可能尚未收到任何回应,因为这是一个难题,并且没有单一的正确答案。
服务器的密钥访问归结为有人值守和无人值守启动之间的权衡。您可以要求与管理员交互(例如加密私钥文件并在启动时手动输入密码);这可以保护静态密钥(在磁盘上)免受泄露,但可以防止无人值守启动。或者,您可以将静态密钥提供给服务器,允许无人值守启动,但这可能会将其暴露给攻击者。
因此,密钥静态保护必须反映您的威胁模型。是否值得花费成本(时间、不便、启动延迟)来要求交互?或者密钥泄露的风险(发生概率对您造成的成本)是否足够低,以至于您可以允许无人值守启动?
假设您继续保持服务器的私钥可用于无人值守启动(即无需管理员交互即可由服务器读取),以下是一些注意事项:
从那里获取根密钥。CA 密钥不应保存在暴露于外界的系统中。在这种情况下,它是您自己的 CA,而不是大型公共 CA,但这是基本的 PKIX 密钥卫生。
以两种形式呈现服务器密钥可能不会带来额外暴露,但也没有好处。删除 server.key。
该目录也可能归 root.http 所有,并设置为 750(root 可写、http 组可读、无世界权限)。最可能的攻击媒介是通过 HTTP 服务器,但还有其他攻击媒介;可能还可通过阻止世界读取/遍历来阻止其中一些攻击媒介。
关于您的最后一个问题:我从未使用过 lighttpd,但有些服务器支持密钥处理过程,即服务器在启动时读取密钥,然后以某种方式放弃权限,以防止其随后读取密钥。例如,服务器可能以 root 身份启动(在 UNIX/Linux 上,如果要绑定到端口 80 和 443,则必须以 root 身份启动),然后读取密钥文件,然后对 http(或其他)执行 setuid。其他服务器可能有从管道或类似设备读取密钥的规定。
也可以使用 lighttpd 从临时副本中读取密钥,服务器启动后启动过程会删除该临时副本。
不过,第一道防线是确保包含密钥文件的目录无法通过任何 Web 根目录访问,并尽力避免服务器所提供服务的路径遍历漏洞。并总体锁定操作系统。
我喜欢 Ivan Ristić 的坚不可摧的 SSL 和 TLS本书(可从 feistyduck.com 获取)提供了有关使用 SSL/TLS 的建议,特别是有关 HTTPS 的建议。对于 Web 服务器,他主要讨论 Apache,但其中的大部分内容都具有广泛的适用性。
我希望这是有帮助的。
答案2
root:root,chmod 400。理想情况下,您的 Root CA 文件不应托管在您的 Web 服务器上,否则服务器的入侵也会危及您的根权限。
https://redmine.lighttpd.net/projects/1/wiki/docs_ssl 权限 请小心保护您的 .pem 文件!Lighttpd 在启动时会读取所有 pem 文件,然后再放弃权限。因此,最好让 pem 文件归 root 所有,并且只有 root 可以读取:$ chown root:root /etc/lighttpd/ssl/example.org.pem $ chmod 400 /etc/lighttpd/ssl/example.org.pem