10.2. 在 CUPS 服务器上配置 TLS 加密
CUPS 支持 TLS 加密的连接,默认情况下,服务为所有需要身份验证的请求强制实施加密连接。如果没有配置证书,CUPS 会创建一个私钥和一个自签名证书。如果只从本地主机访问 CUPS ,这就足够了。对于通过网络的安全连接,请使用由证书颁发机构(CA)签名的服务器证书。
如果没有加密或自签名证书,则中间人(MITM)攻击可以泄露,例如:
- 当使用 Web 界面配置 CUPS 时管理员的凭证
- 当通过网络发送打印作业时的机密数据
先决条件
流程
编辑
/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
错误,请验证私钥和服务器证书文件的名称。
其它资源