第 2 章 在 CUPS 服务器上配置 TLS 加密
CUPS 支持 TLS 加密的连接,默认情况下,该服务为所有需要身份验证的请求强制实施加密连接。如果没有配置证书,CUPS 会创建一个私钥和自签名证书。只有在从本地主机本身访问 CUPS 时,这才足够。对于通过网络的安全连接,请使用由证书颁发机构(CA)签名的服务器证书。
如果没有加密或使用自签名证书,则中间人(MITM)攻击可以披露,例如:
- 使用 Web 界面配置 CUPS 时管理员的凭证
- 在通过网络发送打印作业时的机密数据
先决条件
- CUPS 已配置。
- 您创建了一个私钥,CA 为其发布了一个服务器证书。
- 如果需要中间证书来验证服务器证书,请将中间证书附加到服务器证书中。
- 私钥不受密码保护,因为 CUPS 在服务读取密钥时不提供输入密码的选项。
证书中的规范名称(
CN
)或主题替代名称(SAN)字段与以下之一匹配:- CUPS 服务器的完全限定域名(FQDN)
- DNS 解析为服务器 IP 地址的别名
- 私钥和服务器证书文件使用 Privacy Enhanced Mail (PEM)格式。
- 客户端信任 CA 证书。
- 如果服务器运行 RHEL 9.2 或更高版本,并且启用了 FIPS 模式,客户端必须支持 Extended Master Secret (EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 TLS 扩展"扩展主 Secret "。
流程
编辑
/etc/cups/cups-files.conf
文件,并添加以下设置来禁用自签名证书的自动创建:CreateSelfSignedCerts no
CreateSelfSignedCerts no
Copy 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>.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示服务器的 FQDN:
hostname -f
# hostname -f server.example.com
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.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,使用替代名称而不是流程其余部分中的 FQDN。
将私钥和服务器证书存储在
/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.crt
Copy 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.key
Copy 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 默认情况下,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 cups
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
-
使用浏览器并访问
https://<hostname>:631/admin/
。如果连接成功,您可以在 CUPS 中正确配置 TLS 加密。 -
如果需要为整个服务器配置该加密,请访问
http://<hostname>:631/
。本例中,CUPS 返回一个Upgrade Required
错误。
故障排除
显示
cups
服务的systemd
日志条目:journalctl -u cups
# journalctl -u cups
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在使用 HTTPS 协议无法连接到 Web 界面后,如果日志包含
Unable to encrypt connection: Error while reading file
错误,请验证私钥和服务器证书文件的名称。