第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 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced を参照してください。
手順
/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 server.example.com
# 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 サーバー全体の暗号化を強制するには、
/etc/cups/cupsd.confファイル内のすべての<Location>ディレクティブにEncryption Requiredを追加します。次に例を示します。<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というエラーが含まれている場合は、秘密鍵とサーバー証明書ファイルの名前を確認します。