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

调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:33:20