You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSL证书验证失败无法登录应用,求排查代码问题

Python登录应用代码错误排查

用户代码

import requests
from bs4 import BeautifulSoup
import ssl
import requests  # 重复导入

ssl._create_default_https_context = ssl._create_unverified_context

login_url = 'https://x.x.x.x/xxxxx'
session = requests.Session()
response = requests.get(login_url,verify=False)  # 使用普通requests请求而非session

response = session.get(login_url)  # session请求未关闭SSL验证

login_data = {
'username' : 'xxx',
'password': 'xxx'
}

# 缺失发送登录请求的代码
if 'Welcome' in login_response.text:
print('Login successful')
else:
print('Login failed.')

报错信息

Traceback (most recent call last):
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\connectionpool.py", line 467, in _make_request
self._validate_conn(conn)
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\connectionpool.py", line 1092, in _validate_conn
conn.connect()
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\connection.py", line 642, in connect
sock_and_verified = _ssl_wrap_socket_and_match_hostname(
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\connection.py", line 783, in _ssl_wrap_socket_and_match_hostname
ssl_sock = ssl_wrap_socket(
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\util\ssl_.py", line 469, in ssl_wrap_socket
ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname)
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\util\ssl_.py", line 513, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
File "C:\Users\mukavya\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 501, in wrap_socket
return self.sslsocket_class._create(
File "C:\Users\mukavya\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 1041, in _create
self.do_handshake()
File "C:\Users\mukavya\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 1310, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1129)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\connectionpool.py", line 790, in urlopen
response = self._make_request(
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\connectionpool.py", line 491, in _make_request
raise new_e
urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1129)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\requests\adapters.py", line 486, in send
resp = conn.urlopen(
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\connectionpool.py", line 844, in urlopen
retries = retries.increment(
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\urllib3\util\retry.py", line 515, in increment
raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='x.x.x.x', port=xxx): Max retries exceeded with url: /xxxx (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1129)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\Scripts\templates\datapush2.py", line 27, in <module>
login_response = session.post(login_url , data=login_data)
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\requests\sessions.py", line 637, in post
return self.request("POST", url, data=data, json=json, **kwargs)
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\requests\sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\requests\sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
File "C:\Users\mukavya\PycharmProjects\pythonProject\venv\lib\site-packages\requests\adapters.py", line 517, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='x.x.x.x', port=xxx): Max retries exceeded with url: /xxxx (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1129)')))

Process finished with exit code 1

错误分析与修复方案

代码中的问题点

  1. 重复导入requests:代码开头两次执行import requests,属于冗余操作,可删除其中一次。
  2. session请求未关闭SSL验证:虽然设置了全局SSL不验证,但session.get(login_url)和后续的session.post请求没有显式添加verify=False参数,导致session请求仍会验证SSL证书,触发自签名证书错误。
  3. 缺失登录请求发送逻辑:代码中定义了login_data,但没有执行session.post发送登录请求的代码,导致login_response变量未定义,会引发NameError(报错显示实际代码有这行,但贴出的代码遗漏了)。
  4. 混用普通requests和session请求:先使用requests.get(login_url, verify=False),再使用session.get(login_url),两个请求不属于同一个会话,无法共享Cookie等会话信息,失去了使用session的意义。

修复后的代码

import requests
from bs4 import BeautifulSoup
import ssl

# 全局关闭SSL证书验证
ssl._create_default_https_context = ssl._create_unverified_context

login_url = 'https://x.x.x.x/xxxxx'
session = requests.Session()

# 使用session发送GET请求,关闭SSL验证
response = session.get(login_url, verify=False)

# 定义登录参数
login_data = {
    'username': 'xxx',
    'password': 'xxx'
}

# 发送登录POST请求,关闭SSL验证
login_response = session.post(login_url, data=login_data, verify=False)

# 验证登录结果
if 'Welcome' in login_response.text:
    print('Login successful')
else:
    print('Login failed.')

补充说明

  • 若不想全局关闭SSL验证,也可仅在session的请求中添加verify=False参数,无需设置ssl._create_default_https_context。
  • 生产环境中不建议关闭SSL验证,正确做法是将自签名证书添加到信任列表,然后在请求中指定证书路径:verify="/path/to/certificate.pem"。

内容的提问来源于stack exchange,提问作者Kavya M K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:37:02