Linux下解决python request SSLError

本文介绍了解决因SSL证书问题导致的请求错误的两种方法:一是通过设置环境变量export PYTHONHTTPSVERIFY=0来禁用SSL验证;二是导入不受信任的证书,并指定request证书的路径,包括获取证书、更新证书数据库及设置证书位置的具体步骤。
部署运行你感兴趣的模型镜像

有两个方法:

1. export PYTHONHTTPSVERIFY=0 来disable SSL认证

2. 如果方法1无效,则可以先导入这个不认可得证书,然后指定request证书的路径,步骤如下:

1)获取证书

openssl s_client -connect google.com:443 -showcerts 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > google.crt

openssl s_client -connect projects.engineering.redhat.com:443 -showcerts 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' >  jira.crt

其中,标黑的部分为需要替换的部分,host:port cert_name

2)将证书放到/etc/pki/ca-trust/source/anchors,然后更新证书数据库sudo update-ca-trust

当运行curl host:port不报证书错误时,则可以进行下一步

3)export REQUESTS_CA_BUNDLE=/etc/pki/tls/certs/ca-bundle.crt

指定证书的位置

执行后则不会在有错误了:)

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

# 代码概述 使用 Python 脚本自动化地向目标 URL 发送多种 **POST 请求**,尝试不同路径和头部信息,以获取隐藏的 flag。这是针对提示“Use POST instead of GET”的典型 Web CTF 解题方法。 --- # 代码解析 ```python import requests # 目标基础URL(注意:HTTPS且端口为80) url_base = "https://eci-2ze2len57ph3bd75ld9v.cloudeci1.ichunqiu.com:80" # 常见可能存在的API路径列表 paths = [ "", # 根路径 "/flag", "/get_flag", "/api/flag", "/api", "/submit", "/ajax" ] # 设置请求头,模拟正常浏览器行为 headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36', 'X-Requested-With': 'XMLHttpRequest' } # 遍历所有路径尝试POST请求 for path in paths: target = f"{url_base}{path}" print(f"[*] Testing POST request to: {target}") try: # 发送POST请求,禁用SSL警告,设置超时 response = requests.post(target, headers=headers, timeout=5) # 输出状态码和响应内容 print(f"Status Code: {response.status_code}") content = response.text.strip() if content: print(f"Response Body: {content}") # 检查是否包含flag if 'flag{' in content: print(f"\n🎉 Flag Found! → {content}") break else: print("Response Body: (empty)") except requests.exceptions.SSLError as e: print(f"SSL Error: {e}") except requests.exceptions.RequestException as e: print(f"Request failed: {e}") print("-" * 50) ``` --- ### ✅ 代码说明: - `requests.post()`:发送 POST 请求(符合题目要求“Use POST instead of GET”) - 循环测试多个常见路径,防止遗漏真实接口 - 添加常用 Header: - `Content-Type`:避免被服务端拒绝 - `X-Requested-With`:绕过某些仅允许 AJAX 的逻辑 - 自动检测返回内容中是否包含 `flag{` - 异常处理防止因 SSL 或网络问题中断 --- ### 🔐 特别注意 SSL 问题 由于是 HTTPS 且使用非标准证书(CTF常见),可能会出现: ``` SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] ``` #### 解决方案:临时关闭证书验证(仅限CTF环境) > ⚠️ 注意:此操作不安全,仅用于解题! 修改代码中的请求部分: ```python response = requests.post(target, headers=headers, timeout=5, verify=False) ``` 并在导入后添加抑制警告: ```python from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) ``` --- ### ✅ 完整可运行代码(含错误忽略) ```python import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) url_base = "https://eci-2ze2len57ph3bd75ld9v.cloudeci1.ichunqiu.com:80" paths = ["", "/flag", "/get_flag", "/api/flag", "/api", "/submit"] headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' } for path in paths: target = f"{url_base}{path}" print(f"[*] Testing: {target}") try: res = requests.post(target, headers=headers, timeout=5, verify=False) body = res.text.strip() print(f"Status: {res.status_code}") if body: print(f"Body: {body}") if 'flag{' in body.lower(): print(f"\n✅ Success! Flag: {body}") break except Exception as e: print(f"Error: {e}") print("-" * 50) ``` --- # 知识点(列出该代码中遇到的知识点) - **HTTP POST 请求构造**:使用 `requests.post()` 主动发起 POST 请求以满足服务端校验逻辑。 - **SSL 证书绕过处理**:在 CTF 中常需禁用 HTTPS 证书验证(`verify=False`)以访问自签名站点。 - **路径枚举与响应分析**:通过遍历常见 API 路径并检查返回内容,定位隐藏 flag 接口。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值