How to fix redash saml's self-sign Certificate Authority?
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 343, in _make_request
self._validate_conn(conn)
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 839, in _validate_conn
conn.connect()
File "/usr/local/lib/python3.7/site-packages/urllib3/connection.py", line 344, in connect
ssl_context=context)
File "/usr/local/lib/python3.7/site-packages/urllib3/util/ssl_.py", line 345, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/local/lib/python3.7/site-packages/urllib3/contrib/pyopenssl.py", line 462, in wrap_socket
raise ssl.SSLError('bad handshake: %r' % e)
ssl.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])",)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/local/lib/python3.7/site-packages/urllib3/util/retry.py", line 399, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host=MY_ADFS_SERVER.LOCAL', port=443):
Max retries exceeded with url: /FederationMetadata/2007-06/FederationMetadata.xml
(Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))
Why does it happen?
Redash trying to get SAML’s FederationMetadata.xml
from a self-sign ADFS server. Python package named certifi
did not update with your new CA’s certificate.
How to solve?
Find certifi
’s cacert.pem
and update it.
In terminal, type python
to access its interactive shell. Then, type the following command.
>>> import certifi
>>> certifi . where ()
' /usr/local/lib/python3.7/site-packages/certifi/cacert.pem '
In this case, it’s /usr/local/lib/python3.7/site-packages/certifi/cacert.pem
.
Append your CA’s certificate to cacert.pem
.
$ cat my-ca.crt >> /usr/local/lib/python3.7/site-packages/certifi/cacert.pem
How to test?
In terminal, type python
to access its interactive shell. Then, type the following command.
>>> import requests
>>> requests . request ( " GET " , " https://YOUR_ADFS_DOMAIN/FederationMetadata/2007-06/FederationMetadata.xml " )
Good luck!
Reference