Files
freeipa/ipaserver/install/kra.py
T

129 lines
3.9 KiB
Python
Raw Normal View History

#
# Copyright (C) 2015 FreeIPA Contributors see COPYING for license
#
"""
KRA installer module
"""
2018-04-05 09:21:16 +02:00
from __future__ import absolute_import
import os
2017-03-08 16:38:12 +01:00
from ipalib import api
from ipalib.install.kinit import kinit_keytab
from ipaplatform import services
2015-11-09 18:28:47 +01:00
from ipaplatform.paths import paths
from ipapython import ipautil
2017-03-08 08:03:13 +00:00
from ipapython.install.core import group
from ipaserver.install import cainstance
from ipaserver.install import krainstance
from ipaserver.install import dsinstance
from ipaserver.install import service as _service
from . import dogtag
2015-06-10 08:50:42 +00:00
def install_check(api, replica_config, options):
if replica_config is not None and not replica_config.setup_kra:
return
2015-11-09 18:28:47 +01:00
kra = krainstance.KRAInstance(api.env.realm)
2015-06-10 08:50:42 +00:00
if kra.is_installed():
raise RuntimeError("KRA is already installed.")
if not options.setup_ca:
if cainstance.is_ca_installed_locally():
2015-06-10 08:50:42 +00:00
if api.env.dogtag_version >= 10:
# correct dogtag version of CA installed
pass
else:
raise RuntimeError(
"Dogtag must be version 10.2 or above to install KRA")
else:
raise RuntimeError(
"Dogtag CA is not installed. Please install the CA first")
if replica_config is not None:
2015-06-10 08:50:42 +00:00
if not api.Command.kra_is_enabled()['result']:
raise RuntimeError(
"KRA is not installed on the master system. Please use "
"'ipa-kra-install' command to install the first instance.")
2018-04-26 12:06:36 +02:00
def install(api, replica_config, options, custodia):
if replica_config is None:
if not options.setup_kra:
return
realm_name = api.env.realm
dm_password = options.dm_password
host_name = api.env.host
subject_base = dsinstance.DsInstance().find_subject_base()
pkcs12_info = None
master_host = None
promote = False
else:
if not replica_config.setup_kra:
return
krafile = os.path.join(replica_config.dir, 'kracert.p12')
with ipautil.private_ccache():
ccache = os.environ['KRB5CCNAME']
kinit_keytab(
'host/{env.host}@{env.realm}'.format(env=api.env),
paths.KRB5_KEYTAB,
ccache)
custodia.get_kra_keys(
krafile,
replica_config.dirman_password)
realm_name = replica_config.realm_name
dm_password = replica_config.dirman_password
host_name = replica_config.host_name
subject_base = replica_config.subject_base
pkcs12_info = (krafile,)
master_host = replica_config.kra_host_name
promote = True
kra = krainstance.KRAInstance(realm_name)
kra.configure_instance(realm_name, host_name, dm_password, dm_password,
subject_base=subject_base,
pkcs12_info=pkcs12_info,
master_host=master_host,
promote=promote)
_service.print_msg("Restarting the directory server")
ds = dsinstance.DsInstance()
ds.restart()
2017-11-08 13:21:22 -05:00
kra.enable_client_auth_to_db()
# Restart apache for new proxy config file
services.knownservices.httpd.restart(capture_output=True)
2018-02-05 15:27:44 +01:00
# Restarted named-pkcs11 to restore bind-dyndb-ldap operation, see
# https://pagure.io/freeipa/issue/5813
named = services.knownservices.named # alias for named-pkcs11
if named.is_running():
named.restart(capture_output=True)
2017-03-08 16:38:12 +01:00
def uninstall():
2015-11-09 18:28:47 +01:00
kra = krainstance.KRAInstance(api.env.realm)
2017-03-08 16:38:12 +01:00
kra.stop_tracking_certificates()
2015-06-10 08:50:42 +00:00
if kra.is_installed():
kra.uninstall()
2017-03-08 08:03:13 +00:00
@group
class KRAInstallInterface(dogtag.DogtagInstallInterface):
"""
Interface of the KRA installer
Knobs defined here will be available in:
* ipa-server-install
* ipa-replica-prepare
* ipa-replica-install
* ipa-kra-install
"""
2017-03-08 08:03:13 +00:00
description = "KRA"