Issue #19744: improve ensurepip error when ssl is missing
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
index 0f43bc4..74cd207 100644
--- a/Lib/ensurepip/__init__.py
+++ b/Lib/ensurepip/__init__.py
@@ -14,6 +14,19 @@
 
 _PIP_VERSION = "1.5rc2"
 
+# pip currently requires ssl support, so we try to provide a nicer
+# error message when that is missing (http://bugs.python.org/issue19744)
+_MISSING_SSL_MESSAGE = ("pip {} requires SSL/TLS".format(_PIP_VERSION))
+try:
+    import ssl
+except ImportError:
+    ssl = None
+    def _require_ssl_for_pip():
+        raise RuntimeError(_MISSING_SSL_MESSAGE)
+else:
+    def _require_ssl_for_pip():
+        pass
+
 _PROJECTS = [
     ("setuptools", _SETUPTOOLS_VERSION),
     ("pip", _PIP_VERSION),
@@ -57,6 +70,7 @@
     if altinstall and default_pip:
         raise ValueError("Cannot use altinstall and default_pip together")
 
+    _require_ssl_for_pip()
     _clear_pip_environment_variables()
 
     # By default, installing pip and setuptools installs all of the
@@ -121,6 +135,7 @@
                "({!r} installed, {!r} bundled)")
         raise RuntimeError(msg.format(pip.__version__, _PIP_VERSION))
 
+    _require_ssl_for_pip()
     _clear_pip_environment_variables()
 
     # Construct the arguments to be passed to the pip command