diff options
author | Davanum Srinivas <dims@linux.vnet.ibm.com> | 2013-01-11 00:10:56 -0500 |
---|---|---|
committer | Davanum Srinivas <dims@linux.vnet.ibm.com> | 2013-01-29 11:01:28 -0500 |
commit | e50b68c0d28cb00fa627525f23bb0c0f614b9312 (patch) | |
tree | 646164847bed5f48c66baff2f5b652d49b68746d /openstack/common/sslutils.py | |
parent | a8cc71e8e394ccfae7a0346b9099ac95976427cd (diff) | |
download | oslo-e50b68c0d28cb00fa627525f23bb0c0f614b9312.tar.gz oslo-e50b68c0d28cb00fa627525f23bb0c0f614b9312.tar.xz oslo-e50b68c0d28cb00fa627525f23bb0c0f614b9312.zip |
Support for SSL in wsgi.Service
Enable support for SSL as well using code from glance. We
have some new options for configuring the SSL support.
test_app starts wsgi.Service with a test app, then creates
a url to make sure the http requests are actually served
properly
test_app_using_router adds wsgi.Router and Mapper() to the
mix along with using the wsgify annotation for serving
the http requests
Fixes LP# 979488 (partial)
Fixes LP# 869884 (partial)
DocImpact
Change-Id: Iae47b13b50e00c102c8c36f4a3e73b24fa4e6303
Diffstat (limited to 'openstack/common/sslutils.py')
-rw-r--r-- | openstack/common/sslutils.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/openstack/common/sslutils.py b/openstack/common/sslutils.py new file mode 100644 index 0000000..d813e7a --- /dev/null +++ b/openstack/common/sslutils.py @@ -0,0 +1,79 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2013 IBM +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import os +import ssl + +from openstack.common import cfg +from openstack.common.gettextutils import _ + + +ssl_opts = [ + cfg.StrOpt('ca_file', + default=None, + help="CA certificate file to use to verify " + "connecting clients"), + cfg.StrOpt('cert_file', + default=None, + help="Certificate file to use when starting " + "the server securely"), + cfg.StrOpt('key_file', + default=None, + help="Private key file to use when starting " + "the server securely"), +] + + +CONF = cfg.CONF +CONF.register_opts(ssl_opts, "ssl") + + +def is_enabled(): + cert_file = CONF.ssl.cert_file + key_file = CONF.ssl.key_file + ca_file = CONF.ssl.ca_file + use_ssl = cert_file or key_file + + if cert_file and not os.path.exists(cert_file): + raise RuntimeError(_("Unable to find cert_file : %s") % cert_file) + + if ca_file and not os.path.exists(ca_file): + raise RuntimeError(_("Unable to find ca_file : %s") % ca_file) + + if key_file and not os.path.exists(key_file): + raise RuntimeError(_("Unable to find key_file : %s") % key_file) + + if use_ssl and (not cert_file or not key_file): + raise RuntimeError(_("When running server in SSL mode, you must " + "specify both a cert_file and key_file " + "option value in your configuration file")) + + return use_ssl + + +def wrap(sock): + ssl_kwargs = { + 'server_side': True, + 'certfile': CONF.ssl.cert_file, + 'keyfile': CONF.ssl.key_file, + 'cert_reqs': ssl.CERT_NONE, + } + + if CONF.ssl.ca_file: + ssl_kwargs['ca_certs'] = CONF.ssl.ca_file + ssl_kwargs['cert_reqs'] = ssl.CERT_REQUIRED + + return ssl.wrap_socket(sock, **ssl_kwargs) |