搜索

10.2. 在 CUPS 服务器上配置 TLS 加密

download PDF

CUPS 支持 TLS 加密的连接,默认情况下,服务为所有需要身份验证的请求强制实施加密连接。如果没有配置证书,CUPS 会创建一个私钥和一个自签名证书。如果只从本地主机访问 CUPS ,这就足够了。对于通过网络的安全连接,请使用由证书颁发机构(CA)签名的服务器证书。

警告

如果没有加密或自签名证书,则中间人(MITM)攻击可以泄露,例如:

  • 当使用 Web 界面配置 CUPS 时管理员的凭证
  • 当通过网络发送打印作业时的机密数据

先决条件

  • CUPS 已配置
  • 您创建了一个私钥,以及 CA 为其发布的服务器证书。
  • 如果需要中间证书来验证服务器证书,请将中间证书附加到服务器证书中。
  • 私钥不受密码保护,因为 CUPS 在服务读取密钥时,对输入密码不提供选项。
  • 证书中的规范名称(CN)或主题替代名称(SAN)字段与以下之一匹配:

    • CUPS 服务器的完全限定域名(FQDN)
    • DNS 解析服务器 IP 地址的别名
  • 私钥和服务器证书文件使用 Privacy Enhanced Mail (PEM)格式。
  • 客户端信任 CA 证书。

流程

  1. 编辑 /etc/cups/cups-files.conf 文件,并添加以下设置来禁用自动创建自签名证书:

    CreateSelfSignedCerts no
  2. 删除自签名证书和私钥:

    # rm /etc/cups/ssl/<hostname>.crt /etc/cups/ssl/<hostname>.key
  3. 可选:显示服务器的 FQDN:

    # hostname -f
    server.example.com
  4. 可选:显示证书的 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
      ...
  5. 如果服务器证书中的 CN 或 SAN 字段包含与服务器的 FQDN 不同的别名,请将 ServerAlias 参数添加到 /etc/cups/cupsd.conf 文件中:

    ServerAlias alternative_name.example.com

    在这种情况下,使用替代名称而不是流程剩余部分中的 FQDN。

  6. 将私钥和服务器证书存储在 /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

  7. 对私钥设置安全权限,以使只有 root 用户可以读取此文件:

    # chown root:root /etc/cups/ssl/server.example.com.key
    # chmod 600 /etc/cups/ssl/server.example.com.key

    因为在客户端和服务器建立安全连接之前,证书是它们之间通信的一部分,所以任何客户端都可以检索证书,而无需身份验证。因此,您不需要对服务器证书文件设置严格的权限。

  8. 恢复 SELinux 上下文:

    # restorecon -Rv /etc/cups/ssl/
  9. 默认情况下,CUPS 仅在任务需要身份验证时才强制实施加密的连接,例如在 web 界面中的 /admin 页面中执行管理任务时。

    要为整个 CUPS 服务器强制实施加密,请将 Encryption Required 添加到 /etc/cups/cupsd.conf 文件中的所有 <Location> 指令中,例如:

    <Location />
      ...
      Encryption Required
    </Location>
  10. 重启 CUPS:

    # systemctl restart cups

验证

  1. 使用浏览器并访问 https://<hostname>:631/admin/。如果连接成功,则您正确地在 CUPS 中配置了 TLS 加密。
  2. 如果您为整个服务器所需的该加密,请访问 http://<hostname>:631/。本例中,CUPS 返回一个 Upgrade Required 错误。

故障排除

  • 显示 cups 服务的 systemd 日志条目:

    # journalctl -u cups

    在使用 HTTPS 协议无法连接到 Web 界面后,如果日志包含 Unable to encrypt connection: Error while reading file 错误,请验证私钥和服务器证书文件的名称。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.