django_cas_ng 抛出 SSL 错误
django_cas_ng throws ssl error
当登录请求重定向到远程 CAS 服务器(使用 HTTPS)进行身份验证时,我遇到了 django CAS 客户端的奇怪 SSL 错误。但是我看到远程 CAS 服务器在尝试登录时正在生成票证。我不确定它是在请求还是响应时失败。
Traceback (most recent call last):
File "/home/test/p36d19/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 438, in wrap_socket
cnx.do_handshake()
File "/home/test/p36d19/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1638, in do_handshake
self._raise_ssl_error(self._ssl, result)
File "/home/test/p36d19/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1378, in _raise_ssl_error
_raise_current_error()
File "/home/test/p36d19/lib/python3.6/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.SSL.Error: [('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')]
设置文件是
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_cas_ng',
)
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'django_cas_ng.backends.CASBackend',
)
CAS_SERVER_URL = "https://login.cas-example.com:8443/cas/login"
CAS_REDIRECT_URL = '/login_test'
我是 运行 django 应用程序,在我的开发机器上使用 runsslserver 和自证书(并尝试使用服务器的证书)。
即使设置了以下环境变量也没有运气(带有 SSL 库的请求模块中存在错误)
REQUESTS_CA_BUNDLE='\tmp\app.crt'
您的客户端似乎无法验证服务器证书。
'ssl3_get_server_certificate', 'certificate verify failed'
这可能是因为证书有问题,或者您的客户端无法访问用于签署服务器证书的 CA 证书。
检查服务器证书是否有效(例如主机名正确、未过时、未吊销、证书类型正确、RSA 密钥长度不能太短且没有 MD5 签名)
您可以使用 openssl 测试服务器握手:
openssl s_client -connect yourserver.com:443 -CAfile server-ca.crt
确保签署服务器证书的完整证书链在您的 app.crt 'REQUESTS_CA_BUNDLE='\tmp\app.crt'
中(对于 ca 证书,app 是一个奇怪的名称)
将以下行添加到您的 settings.py
:
CAS_VERIFY_SSL_CERTIFICATE = False
当登录请求重定向到远程 CAS 服务器(使用 HTTPS)进行身份验证时,我遇到了 django CAS 客户端的奇怪 SSL 错误。但是我看到远程 CAS 服务器在尝试登录时正在生成票证。我不确定它是在请求还是响应时失败。
Traceback (most recent call last):
File "/home/test/p36d19/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 438, in wrap_socket
cnx.do_handshake()
File "/home/test/p36d19/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1638, in do_handshake
self._raise_ssl_error(self._ssl, result)
File "/home/test/p36d19/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1378, in _raise_ssl_error
_raise_current_error()
File "/home/test/p36d19/lib/python3.6/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.SSL.Error: [('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')]
设置文件是
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_cas_ng',
)
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'django_cas_ng.backends.CASBackend',
)
CAS_SERVER_URL = "https://login.cas-example.com:8443/cas/login"
CAS_REDIRECT_URL = '/login_test'
我是 运行 django 应用程序,在我的开发机器上使用 runsslserver 和自证书(并尝试使用服务器的证书)。
即使设置了以下环境变量也没有运气(带有 SSL 库的请求模块中存在错误)
REQUESTS_CA_BUNDLE='\tmp\app.crt'
您的客户端似乎无法验证服务器证书。
'ssl3_get_server_certificate', 'certificate verify failed'
这可能是因为证书有问题,或者您的客户端无法访问用于签署服务器证书的 CA 证书。
检查服务器证书是否有效(例如主机名正确、未过时、未吊销、证书类型正确、RSA 密钥长度不能太短且没有 MD5 签名)
您可以使用 openssl 测试服务器握手:
openssl s_client -connect yourserver.com:443 -CAfile server-ca.crt
确保签署服务器证书的完整证书链在您的 app.crt 'REQUESTS_CA_BUNDLE='\tmp\app.crt'
中(对于 ca 证书,app 是一个奇怪的名称)
将以下行添加到您的 settings.py
:
CAS_VERIFY_SSL_CERTIFICATE = False