セキュリティ
通信を暗号化するには、組織のサードパーティのCA証明書を構成して、HTTPS経由で接続しているユーザーにOracle Linux Virtualization Managerを識別します。
HTTPS接続にサード・パーティのCA証明書を使用しても、エンジン・ホストとKVMホストの間の認証に使用される証明書には影響しません。 これらは引き続き、Managerによって生成される自己署名証明書を使用します。
HTTP Strict Transport Security (HSTS)を有効にして、プロトコル・ダウングレード攻撃やcookieハイ・ジャックなどの中間者攻撃からwebサイトを保護することもできます。
ノート:
Federal Information Processing Standard (FIPS)への準拠が必要な場合は、Oracle Linux Virtualization Managerデプロイメントに対してFIPSモードを有効にできます。 「Oracle Linux Virtualization Manager: はじめに」の「FIPSモードのデプロイメント」を参照してください。Oracle Linux Virtualization Manager Apache SSL証明書の置換
開始する前に、認証局(CA)によって発行されたデジタル証明書であるサード・パーティCA証明書を取得する必要があります。 証明書はPEMファイルとして提供されます。 証明書チェーンはルート証明書までの完全なものである必要があります。 チェーンの順序は重要であり、最後の中間証明書からルート証明書まで連なっている必要があります。
注意:
/etc/pki
ディレクトリまたはサブディレクトリの権限および所有権は変更しないでください。 /etc/pki
および/etc/pki/ovirt-engine
ディレクトリの権限は、755
のデフォルト値として維持する必要があります。
Oracle Linux Virtualization Manager Apache SSL証明書を置換するには:
-
新規のサード・パーティCA証明書をホスト全体の信頼ストアにコピーし、信頼ストアを更新します。
# cp third-party-ca-cert.pem /etc/pki/ca-trust/source/anchors/ # update-ca-trust export
-
/etc/pki/ovirt-engine/apache-ca.pem
へのシンボリック・リンクを削除します。エンジンは、
/etc/pki/ovirt-engine/ca.pem
にシンボリック・リンクされている/etc/pki/ovirt-engine/apache-ca.pem
を使用するように構成されています。# rm /etc/pki/ovirt-engine/apache-ca.pem
-
CA証明書をManagerのPKIディレクトリにコピーします。
# cp third-party-ca-cert.pem /etc/pki/ovirt-engine/apache-ca.pem
-
既存の秘密キーと証明書をバックアップします。
# cp /etc/pki/ovirt-engine/certs/apache.cer /etc/pki/ovirt-engine/certs/apache.cer.bck # cp /etc/pki/ovirt-engine/keys/apache.key.nopass /etc/pki/ovirt-engine/keys/apache.key.nopass.bck
-
次のコマンドを入力することにより新しいApache秘密キーをManagerのPKIディレクトリにコピーし、プロンプトに応答します。
# cp apache.key /etc/pki/ovirt-engine/keys/apache.key.nopass cp: overwrite /etc/pki/ovirt-engine/keys/apache.key.nopass? y
-
次のコマンドを入力することにより新しいApache証明書をManagerのPKIディレクトリにコピーし、プロンプトに応答します。
# cp apache.cer /etc/pki/ovirt-engine/certs/apache.cer cp: overwrite /etc/pki/ovirt-engine/certs/apache.cer? y
-
Apache HTTPサーバー(
httpd
)およびManagerを再起動します。# systemctl restart httpd # systemctl restart ovirt-engine
-
次のパラメータを追加して、新しいトラスト・ストア構成ファイル(または既存のもの)を
/etc/ovirt-engine/engine.conf.d/99-custom-truststore.conf
に作成します。ENGINE_HTTPS_PKI_TRUST_STORE="/etc/pki/java/cacerts" ENGINE_HTTPS_PKI_TRUST_STORE_PASSWORD=""
-
既存のWebsocket構成ファイルをバックアップします。
# cp /etc/ovirt-engine/ovirt-websocket-proxy.conf.d/10-setup.conf /etc/ovirt-engine/ \ ovirt-websocket-proxy.conf.d/10-setup.conf.bck
-
次のパラメータを追加して、
/etc/ovirt-engine/ovirt-websocket-proxy.conf.d/10-setup.conf
のWebsocket構成ファイルを編集します。SSL_CERTIFICATE=/etc/pki/ovirt-engine/certs/apache.cer SSL_KEY=/etc/pki/ovirt-engine/keys/apache.key.nopass
-
ovirt-provider-ovn
サービスを再起動します。# systemctl restart ovirt-provider-ovn
-
ovirt-engine
サービスを再起動します。# systemctl restart ovirt-engine
HTTP Strict Transport Securityの有効化
HTTP Strict Transport Securityを有効にするには、次のステップを実行します。
- ovirt-engineサービス・ポート443の場合は、
httpd
の構成ファイルを作成します。たとえば:# cat ovirt-enable-strict-transport-security.conf LoadModule headers_module modules/mod_headers.so Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains" <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </IfModule> # systemctl restart httpd
_internal/http.py
ファイルを変更します:# vi /usr/lib64/python3.6/site-packages/ovirt_imageio/_internal/http.py
class Response:
def __init__(self, con):
self._con = con
self.status_code = OK
self.headers = Headers({"content-length": 0, "Strict-Transport-Security": "max-age=31536000"})
self._started = False
# systemctl restart ovirt-imageio
# curl -s -I -k https://localhost:54323
HTTP/1.1 404 Not Found
server: imageio/2.4.7
date: Wed, 13 Sep 2023 16:56:45 GMT
content-length: 19
Strict-Transport-Security: max-age=31536000
content-type: text/plain; charset=UTF-8
server.py
ファイルを変更します:# vi /usr/lib64/python3.6/http/server.py
def send_response(self, code, message=None):
"""Add the response header to the headers buffer and log the
response code.
Also send two standard headers with the server software
version and the current date.
"""
self.log_request(code)
self.send_response_only(code, message)
self.send_header('Server', self.version_string())
self.send_header('Date', self.date_time_string())
# Oracle Bug-33308887: added below header for security scans
self.send_header("Strict-Transport-Security", "max-age=31536000")
# systemctl restart ovirt-provider-ovn
# curl -s -I -k https://localhost:35357
HTTP/1.0 501 Unsupported method ('HEAD')
Server: BaseHTTP/0.6 Python/3.6.8
Date: Wed, 13 Sep 2023 17:34:32 GMT
Strict-Transport-Security: max-age=31536000
Connection: close
Content-Type: application/json
Content-Length: 137
response.py
ファイルを変更します。# vi /usr/lib/python3.6/site-packages/webob/response.py
# Initialize headers
self._headers = None
if headerlist is None:
self._headerlist = []
else:
self._headerlist = headerlist
self._headerlist.append(('Strict-Transport-Security', 'max-age=31536000'))
# systemctl restart ovirt-websocket-proxy
# curl -s -I -k https://localhost:6100
HTTP/1.1 405 Method Not Allowed
Server: WebSockify Python/3.6.8
Date: Wed, 13 Sep 2023 18:31:12 GMT
Strict-Transport-Security: max-age=31536000
Connection: close
Content-Type: text/html;charset=utf-8
Content-Length: 472