10.2. 在 CUPS 服务器上配置 TLS 加密
CUPS 支持 TLS 加密的连接,默认情况下,服务为所有需要身份验证的请求强制实施加密连接。如果没有配置证书,CUPS 会创建一个私钥和一个自签名证书。如果只从本地主机访问 CUPS ,这就足够了。对于通过网络的安全连接,请使用由证书颁发机构(CA)签名的服务器证书。
如果没有加密或自签名证书,则中间人(MITM)攻击可以泄露,例如:
- 当使用 Web 界面配置 CUPS 时管理员的凭证
- 当通过网络发送打印作业时的机密数据
先决条件
流程
编辑
/etc/cups/cups-files.conf文件,并添加以下设置来禁用自动创建自签名证书:CreateSelfSignedCerts no
CreateSelfSignedCerts noCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除自签名证书和私钥:
rm /etc/cups/ssl/<hostname>.crt /etc/cups/ssl/<hostname>.key
# rm /etc/cups/ssl/<hostname>.crt /etc/cups/ssl/<hostname>.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示服务器的 FQDN:
hostname -f
# hostname -f server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将私钥和服务器证书存储在
/etc/cups/ssl/目录中,例如:mv /root/server.key /etc/cups/ssl/server.example.com.key mv /root/server.crt /etc/cups/ssl/server.example.com.crt
# mv /root/server.key /etc/cups/ssl/server.example.com.key # mv /root/server.crt /etc/cups/ssl/server.example.com.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要CUPS 要求您将私钥命名为
<fqdn>.key,将服务器证书文件命名为<fqdn>.crt。如果使用别名,则必须将文件命名为<alias>.key和<alias>.crt。对私钥设置安全权限,以使只有
root用户可以读取此文件:chown root:root /etc/cups/ssl/server.example.com.key chmod 600 /etc/cups/ssl/server.example.com.key
# chown root:root /etc/cups/ssl/server.example.com.key # chmod 600 /etc/cups/ssl/server.example.com.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 因为在客户端和服务器建立安全连接之前,证书是它们之间通信的一部分,所以任何客户端都可以检索证书,而无需身份验证。因此,您不需要对服务器证书文件设置严格的权限。
恢复 SELinux 上下文:
restorecon -Rv /etc/cups/ssl/
# restorecon -Rv /etc/cups/ssl/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示证书的
CN和 SAN 字段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果服务器证书中的
CN或 SAN 字段包含与服务器的 FQDN 不同的别名,请将ServerAlias参数添加到/etc/cups/cupsd.conf文件中:ServerAlias alternative_name.example.com
ServerAlias alternative_name.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,使用替代名称而不是流程剩余部分中的 FQDN。
默认情况下,CUPS 仅在任务需要身份验证时才强制实施加密的连接,例如在 web 界面中的
/admin页面中执行管理任务时。要为整个 CUPS 服务器强制实施加密,请将
Encryption Required添加到/etc/cups/cupsd.conf文件中的所有<Location>指令中,例如:<Location /> ... Encryption Required </Location>
<Location /> ... Encryption Required </Location>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 CUPS:
systemctl restart cups
# systemctl restart cupsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
-
使用浏览器并访问
https://<hostname>:631/admin/。这要求您的浏览器信任 CA 证书。如果连接成功,则您正确地在 CUPS 中配置了 TLS 加密。 -
如果您为整个服务器所需的该加密,请访问
http://<hostname>:631/。本例中,CUPS 返回一个Upgrade Required错误。
故障排除
显示
cups服务的systemd日志条目:journalctl -u cups
# journalctl -u cupsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在使用 HTTPS 协议无法连接到 Web 界面后,如果日志包含
Unable to encrypt connection: Error while reading file错误,请验证私钥和服务器证书文件的名称。