调用Python API删除AAP临时凭证时出现SSL错误
AAP临时凭证删除时SSL错误(已设
verify=False仍触发)的解决办法 问题描述
在Ansible Automation Platform(AAP)中创建临时凭证操作正常,但执行删除临时凭证的作业时,即使在Python脚本的requests请求中设置了verify=False禁用证书验证,仍出现以下SSL错误:
ssl.SSLError: [SSL: INVALID_ALERT] invalid alert (_ssl.c:1131)
解决方案
1. 自定义SSL上下文,强制指定兼容的TLS版本
部分AAP服务器的SSL加密套件与Python客户端默认配置不兼容,导致握手失败。可以通过自定义SSL适配器强制使用TLSv1.2(或服务器支持的版本):
修改credential.py的delete函数,添加会话适配器:
import ssl from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager from urllib3.util import ssl_ # 自定义TLS适配器 class TLSAdapter(HTTPAdapter): def init_poolmanager(self, connections, maxsize, block=False): # 强制使用TLSv1.2,可根据服务器支持情况调整为TLSv1.3 ctx = ssl_.create_urllib3_context(ssl_version=ssl.PROTOCOL_TLSv1_2) self.poolmanager = PoolManager( num_pools=connections, maxsize=maxsize, block=block, ssl_context=ctx ) def delete(name: str) -> dict: """Delete the TEMPORARY AAP machine credentials.""" # 创建会话并挂载适配器 session = requests.Session() session.mount(os.environ['AWX_HOST'], TLSAdapter()) # 替换原requests.get为session.get resp = session.get( url=os.environ['AWX_HOST']+f'/api/v2/credentials/?name={name}', auth=AUTH, headers=HEADERS, timeout=30, verify=False, ) if resp.status_code == 401: raise InvalidAuthenticationException('Invalid Login Credentials') results = resp.json()['results'] for credential in results: # 替换原requests.delete为session.delete resp = session.delete( url=os.environ['AWX_HOST']+credential['url'], auth=AUTH, headers=HEADERS, timeout=30, verify=False, ) # 后续逻辑保持不变...
2. 检查AWX_HOST环境变量的URL格式
确保AWX_HOST的值为标准HTTPS格式(如https://aap.example.com),末尾不要加斜杠。如果credential['url']返回的是/api/v2/credentials/123/,拼接后会出现重复斜杠,导致服务器返回异常SSL响应。
3. 全局禁用SSL警告并强化证书忽略设置
在credential.py开头添加以下代码,彻底禁用SSL相关警告并强制忽略证书检查:
import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
同时在自定义SSL上下文时补充:
ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE
4. 手动验证删除接口的可用性
用curl命令测试AAP的删除接口,确认是否是Python脚本的问题:
# 替换为你的AAP信息和凭证ID curl -k -u <AAP_USER>:<AAP_PASS> -X DELETE https://<AAP_HOST>/api/v2/credentials/<凭证ID>/
如果curl执行成功,说明问题出在Python的SSL处理逻辑;如果curl也失败,需检查AAP服务器的SSL配置或凭证删除权限。
5. 升级requests和urllib3依赖
旧版本的requests/urllib3可能存在SSL握手兼容性Bug,升级到最新稳定版本:
pip install --upgrade requests urllib3
内容的提问来源于stack exchange,提问作者Danish
相关产品推荐
相关产品推荐

