diff --git a/README.md b/README.md index a7e18ae..eda9d83 100644 --- a/README.md +++ b/README.md @@ -86,8 +86,12 @@ How to use it AUTH_CROWD_SERVER_REST_URI = 'http://127.0.0.1:8095/crowd/rest/usermanagement/latest' _Use given certificate file to validate https connection to Crowd server_ - + AUTH_CROWD_SERVER_TRUSTED_ROOT_CERTS_FILE = None + + _Disable validation of server certificate for https connection to Crowd server (This is a security risk and is not recommended for production environments)_ + + AUTH_CROWD_SERVER_VALIDATE_CERTIFICATE = False Problems ? ========== @@ -97,4 +101,4 @@ Just send me a message. Let's see if I can help. License ======= -Use this code as you want. Consider it free. Say thank you. Don't blame me if it doesn't work for you. \ No newline at end of file +Use this code as you want. Consider it free. Say thank you. Don't blame me if it doesn't work for you. diff --git a/crowdrest/backend.py b/crowdrest/backend.py index ff3fd74..9cd81cd 100644 --- a/crowdrest/backend.py +++ b/crowdrest/backend.py @@ -151,12 +151,19 @@ def connect(self): if self._tunnel_host: self.sock = sock self._tunnel() + # wrap the socket using verification with the root certificates of given file - self.sock = ssl.wrap_socket(sock, - self.key_file, - self.cert_file, - cert_reqs=ssl.CERT_REQUIRED, - ca_certs=getattr(settings, "AUTH_CROWD_SERVER_TRUSTED_ROOT_CERTS_FILE", None)) + certs = getattr(settings, "AUTH_CROWD_SERVER_TRUSTED_ROOT_CERTS_FILE", None) + validate_certs = getattr(settings, "AUTH_CROWD_SERVER_VALIDATE_CERTIFICATE", True) + + if certs and validate_certs: + self.sock = ssl.wrap_socket(sock, + self.key_file, + self.cert_file, + cert_reqs=ssl.CERT_REQUIRED, + ca_certs=certs) + elif not validate_certs: + self.sock = ssl.wrap_socket(sock) # wraps https connections with ssl certificate verification class VerifiedHTTPSHandler(urllib2.HTTPSHandler): @@ -197,8 +204,14 @@ def _createOpener(self): handlers += [authHandler] certs = getattr(settings, "AUTH_CROWD_SERVER_TRUSTED_ROOT_CERTS_FILE", None) - if self._url.startswith('https') and certs: - crowd_logger.debug("Validating certificate with " + certs) + validate_certs = getattr(settings, "AUTH_CROWD_SERVER_VALIDATE_CERTIFICATE", True) + + if self._url.startswith('https') and (certs or not validate_certs): + if certs: + crowd_logger.debug("Validating certificate with " + certs) + elif not validate_certs: + crowd_logger.warning("Certificate validation is disabled!") + verifyHandler = VerifiedHTTPSHandler() handlers += [verifyHandler]