mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
ipa-client-install: Publish CA certificate to systemwide store
During the installation, copy the CA certificate to the systemwide store (/etc/pki/ca-trust/source/anchors/ipa-ca.crt) and update the systemwide CA database. This allows browsers to access IPA WebUI without warning out of the box. https://fedorahosted.org/freeipa/ticket/3504
This commit is contained in:
parent
60b472479d
commit
4a0e91449e
@ -673,6 +673,9 @@ def uninstall(options, env):
|
|||||||
root_logger.warning('Please remove /etc/ipa/default.conf manually, '
|
root_logger.warning('Please remove /etc/ipa/default.conf manually, '
|
||||||
'as it can cause subsequent installation to fail.')
|
'as it can cause subsequent installation to fail.')
|
||||||
|
|
||||||
|
# Remove the CA cert from the systemwide certificate store
|
||||||
|
ipaservices.remove_ca_cert_from_systemwide_ca_store(CACERT)
|
||||||
|
|
||||||
# Remove the CA cert
|
# Remove the CA cert
|
||||||
try:
|
try:
|
||||||
os.remove(CACERT)
|
os.remove(CACERT)
|
||||||
@ -2403,12 +2406,20 @@ def install(options, env, fstore, statestore):
|
|||||||
return CLIENT_INSTALL_ERROR
|
return CLIENT_INSTALL_ERROR
|
||||||
root_logger.info("Configured /etc/sssd/sssd.conf")
|
root_logger.info("Configured /etc/sssd/sssd.conf")
|
||||||
|
|
||||||
|
# Add the CA to the platform-dependant systemwide CA store
|
||||||
|
ipaservices.insert_ca_cert_into_systemwide_ca_store(CACERT)
|
||||||
|
|
||||||
# Add the CA to the default NSS database and trust it
|
# Add the CA to the default NSS database and trust it
|
||||||
try:
|
try:
|
||||||
run(["/usr/bin/certutil", "-A", "-d", "/etc/pki/nssdb", "-n", "IPA CA", "-t", "CT,C,C", "-a", "-i", CACERT])
|
root_logger.debug("Attempting to add CA directly to the "
|
||||||
|
"default NSS database.")
|
||||||
|
run(["/usr/bin/certutil", "-A", "-d", "/etc/pki/nssdb",
|
||||||
|
"-n", "IPA CA", "-t", "CT,C,C", "-a", "-i", CACERT])
|
||||||
except CalledProcessError, e:
|
except CalledProcessError, e:
|
||||||
root_logger.info("Failed to add CA to the default NSS database.")
|
root_logger.info("Failed to add CA to the default NSS database.")
|
||||||
return CLIENT_INSTALL_ERROR
|
return CLIENT_INSTALL_ERROR
|
||||||
|
else:
|
||||||
|
root_logger.info('Added the CA to the default NSS database.')
|
||||||
|
|
||||||
host_principal = 'host/%s@%s' % (hostname, cli_realm)
|
host_principal = 'host/%s@%s' % (hostname, cli_realm)
|
||||||
if options.on_master:
|
if options.on_master:
|
||||||
|
@ -17,6 +17,14 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import shutil
|
||||||
|
import os
|
||||||
|
|
||||||
|
from subprocess import CalledProcessError
|
||||||
|
|
||||||
|
from ipapython.ipa_log_manager import root_logger
|
||||||
|
from ipapython.ipautil import run
|
||||||
|
|
||||||
from ipapython.platform import fedora18, base
|
from ipapython.platform import fedora18, base
|
||||||
|
|
||||||
# All what we allow exporting directly from this module
|
# All what we allow exporting directly from this module
|
||||||
@ -38,10 +46,19 @@ from ipapython.platform import fedora18, base
|
|||||||
# applicable
|
# applicable
|
||||||
# check_selinux_status -- platform-specific way to see if SELinux is enabled
|
# check_selinux_status -- platform-specific way to see if SELinux is enabled
|
||||||
# and restorecon is installed.
|
# and restorecon is installed.
|
||||||
|
# insert_ca_cert_into_systemwide_ca_store - platform-specific way to insert our
|
||||||
|
# CA certificate into the systemwide
|
||||||
|
# CA store
|
||||||
|
# remove_ca_cert_from_systemwide_ca_store - platform-specific way to remove our
|
||||||
|
# CA certificate from the systemwide
|
||||||
|
# CA store
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['authconfig', 'service', 'knownservices',
|
__all__ = ['authconfig', 'service', 'knownservices',
|
||||||
'backup_and_replace_hostname', 'restore_context', 'check_selinux_status',
|
'backup_and_replace_hostname', 'restore_context', 'check_selinux_status',
|
||||||
'restore_network_configuration', 'timedate_services']
|
'restore_network_configuration', 'timedate_services',
|
||||||
|
'insert_ca_cert_into_systemwide_ca_store',
|
||||||
|
'remove_ca_cert_from_systemwide_ca_store']
|
||||||
|
|
||||||
# Just copy a referential list of timedate services
|
# Just copy a referential list of timedate services
|
||||||
timedate_services = list(base.timedate_services)
|
timedate_services = list(base.timedate_services)
|
||||||
@ -53,3 +70,51 @@ service = fedora18.service
|
|||||||
knownservices = fedora18.knownservices
|
knownservices = fedora18.knownservices
|
||||||
restore_context = fedora18.restore_context
|
restore_context = fedora18.restore_context
|
||||||
check_selinux_status = fedora18.check_selinux_status
|
check_selinux_status = fedora18.check_selinux_status
|
||||||
|
|
||||||
|
systemwide_ca_store = '/etc/pki/ca-trust/source/anchors/'
|
||||||
|
|
||||||
|
|
||||||
|
def insert_ca_cert_into_systemwide_ca_store(cacert_path):
|
||||||
|
# Add the 'ipa-' prefix to cert name to avoid name collisions
|
||||||
|
cacert_name = os.path.basename(cacert_path)
|
||||||
|
new_cacert_path = os.path.join(systemwide_ca_store, 'ipa-%s' % cacert_name)
|
||||||
|
|
||||||
|
# Add the CA to the systemwide CA trust database
|
||||||
|
try:
|
||||||
|
shutil.copy(cacert_path, new_cacert_path)
|
||||||
|
run(['/usr/bin/update-ca-trust'])
|
||||||
|
except OSError, e:
|
||||||
|
root_logger.info("Failed to copy %s to %s" % (cacert_path,
|
||||||
|
new_cacert_path))
|
||||||
|
except CalledProcessError, e:
|
||||||
|
root_logger.info("Failed to add CA to the systemwide "
|
||||||
|
"CA trust database: %s" % str(e))
|
||||||
|
else:
|
||||||
|
root_logger.info('Added the CA to the systemwide CA trust database.')
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def remove_ca_cert_from_systemwide_ca_store(cacert_path):
|
||||||
|
# Derive the certificate name in the store
|
||||||
|
cacert_name = os.path.basename(cacert_path)
|
||||||
|
new_cacert_path = os.path.join(systemwide_ca_store, 'ipa-%s' % cacert_name)
|
||||||
|
|
||||||
|
# Remove CA cert from systemwide store
|
||||||
|
if os.path.exists(new_cacert_path):
|
||||||
|
try:
|
||||||
|
os.remove(new_cacert_path)
|
||||||
|
run(['/usr/bin/update-ca-trust'])
|
||||||
|
except OSError, e:
|
||||||
|
root_logger.error('Could not remove: %s, %s'
|
||||||
|
% (new_cacert_path, str(e)))
|
||||||
|
return False
|
||||||
|
except CalledProcessError, e:
|
||||||
|
root_logger.error('Could not update systemwide CA trust '
|
||||||
|
'database: %s' % str(e))
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
root_logger.info('Systemwide CA database updated.')
|
||||||
|
|
||||||
|
return True
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
authconfig = None
|
authconfig = None
|
||||||
|
|
||||||
# knownservices is an entry point to known platform services
|
# knownservices is an entry point to known platform services
|
||||||
# (instance of ipapython.platform.base.KnownServices)
|
# (instance of ipapython.platform.base.KnownServices)
|
||||||
knownservices = None
|
knownservices = None
|
||||||
|
|
||||||
# service is a class to instantiate ipapython.platform.base.PlatformService
|
# service is a class to instantiate ipapython.platform.base.PlatformService
|
||||||
@ -55,4 +55,13 @@ from ipapython.platform.base import SVC_LIST_FILE
|
|||||||
def get_svc_list_file():
|
def get_svc_list_file():
|
||||||
return SVC_LIST_FILE
|
return SVC_LIST_FILE
|
||||||
|
|
||||||
|
def insert_ca_cert_into_systemwide_ca_store_default(path):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def remove_ca_cert_from_systemwide_ca_store_default(path):
|
||||||
|
return True
|
||||||
|
|
||||||
|
insert_ca_cert_into_systemwide_ca_store = insert_ca_cert_into_systemwide_ca_store_default
|
||||||
|
remove_ca_cert_from_systemwide_ca_store = remove_ca_cert_from_systemwide_ca_store_default
|
||||||
|
|
||||||
from ipapython.platform.SUPPORTED_PLATFORM import *
|
from ipapython.platform.SUPPORTED_PLATFORM import *
|
||||||
|
Loading…
Reference in New Issue
Block a user