10.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 証明書を信頼している。
手順
/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 サーバー全体の暗号化を強制するには、
/etc/cups/cupsd.conf
ファイル内のすべての<Location>
ディレクティブにEncryption Required
を追加します。次に例を示します。<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
というエラーが含まれている場合は、秘密鍵とサーバー証明書ファイルの名前を確認します。