第 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删除自签名证书和私钥:
# rm /etc/cups/ssl/<hostname>.crt /etc/cups/ssl/<hostname>.key可选:显示服务器的 FQDN:
# hostname -f server.example.com可选:显示证书的
CN和 SAN 字段:# openssl x509 -text -in /etc/cups/ssl/server.example.com.crt Certificate: Data: ... Subject: CN = server.example.com ... X509v3 extensions: ... X509v3 Subject Alternative Name: DNS:server.example.com ...如果服务器证书中的
CN或 SAN 字段包含与服务器的 FQDN 不同的别名,请将ServerAlias参数添加到/etc/cups/cupsd.conf文件中:ServerAlias alternative_name.example.com在这种情况下,使用替代名称而不是流程其余部分中的 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重要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因为证书是客户端和服务器之间在建立安全连接之前通信的一部分,所以,任何客户端都可以检索证书,而不需要身份验证。因此,您不需要对服务器证书文件设置严格的权限。
恢复 SELinux 上下文:
# restorecon -Rv /etc/cups/ssl/默认情况下,CUPS 仅在任务需要身份验证时才强制实施加密连接,例如在 web 界面中对
/admin页面执行管理任务时。要为整个 CUPS 服务器强制实施加密,请将
Encryption Required添加到/etc/cups/cupsd.conf文件中的所有<Location>指令中,例如:<Location /> ... Encryption Required </Location>重启 CUPS:
# systemctl restart cups
验证
-
使用浏览器并访问
https://<hostname>:631/admin/。如果连接成功,您可以在 CUPS 中正确配置 TLS 加密。 -
如果需要为整个服务器配置该加密,请访问
http://<hostname>:631/。本例中,CUPS 返回一个Upgrade Required错误。
故障排除
显示
cups服务的systemd日志条目:# journalctl -u cups在使用 HTTPS 协议无法连接到 Web 界面后,如果日志包含
Unable to encrypt connection: Error while reading file错误,请验证私钥和服务器证书文件的名称。