Replace pip-installed requests CA bundle with link
If the version of python-requests required is higher than that provided by the operating system, pip will install it from upstream. The upstream version provides its own CA certificate bundle based on the Mozilla bundle, and defaults to that in case a CA certificate file is not specified for a request. The distribution-specific packages point to the system-wide CA bundle that can be managed by tools such as update-ca-trust (Fedora/RHEL) and update-ca-certificates (Debian/Ubuntu). When installing in SSL/TLS mode, either with SSL=True or by adding tls-proxy to ENABLED_SERVICES, if a non-systemwide CA bundle is used, then the CA generated by devstack will not be used causing the installation to fail. Replace the upstream-provided bundle with a link to the system bundle when possible. Change-Id: I651aec93398d583dcdc8323503792df7ca05a7e7 Closes-Bug: #1459789
This commit is contained in:
parent
dae868fcb0
commit
1987fcc8a3
24
lib/tls
24
lib/tls
@ -202,6 +202,7 @@ subjectAltName = \$ENV::SUBJECT_ALT_NAME
|
||||
# Create root and intermediate CAs
|
||||
# init_CA
|
||||
function init_CA {
|
||||
fix_system_ca_bundle_path
|
||||
# Ensure CAs are built
|
||||
make_root_CA $ROOT_CA_DIR
|
||||
make_int_CA $INT_CA_DIR $ROOT_CA_DIR
|
||||
@ -338,6 +339,29 @@ function make_root_CA {
|
||||
-outform PEM
|
||||
}
|
||||
|
||||
# If a non-system python-requests is installed then it will use the
|
||||
# built-in CA certificate store rather than the distro-specific
|
||||
# CA certificate store. Detect this and symlink to the correct
|
||||
# one. If the value for the CA is not rooted in /etc then we know
|
||||
# we need to change it.
|
||||
function fix_system_ca_bundle_path {
|
||||
if is_service_enabled tls-proxy || [ "$USE_SSL" == "True" ]; then
|
||||
local capath=$(python -c $'try:\n from requests import certs\n print certs.where()\nexcept ImportError: pass')
|
||||
|
||||
if [[ ! $capath == "" && ! $capath =~ ^/etc/.* && ! -L $capath ]]; then
|
||||
if is_fedora; then
|
||||
sudo rm -f $capath
|
||||
sudo ln -s /etc/pki/tls/certs/ca-bundle.crt $capath
|
||||
elif is_ubuntu; then
|
||||
sudo rm -f $capath
|
||||
sudo ln -s /etc/ssl/certs/ca-certificates.crt $capath
|
||||
else
|
||||
echo "Don't know how to set the CA bundle, expect the install to fail."
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Certificate Input Configuration
|
||||
# ===============================
|
||||
|
Loading…
Reference in New Issue
Block a user