从AWS Lambda访问AWS Device Farm出现SSL证书错误但桌面端正常
问题根因
- 你给
devicefarm_client设置的verify=False仅作用于boto3调用Device Farm API的请求,不会影响Selenium Remote WebDriver与TestGrid端点通信时的SSL校验逻辑 desired_capabilities['acceptInsecureCerts'] = True是远端Chrome浏览器的配置,仅控制浏览器访问目标站点时的证书校验规则,和Selenium客户端本身发请求到TestGrid服务的SSL校验无关
解决方案
你需要自定义Selenium的远程连接逻辑,关闭其请求TestGrid时的SSL证书校验,参考修改后的代码如下:
import boto3 import ssl from selenium.webdriver import Remote from selenium.webdriver import DesiredCapabilities from selenium.webdriver.remote.remote_connection import RemoteConnection # 自定义不校验SSL证书的远程连接类 class InsecureTestGridConnection(RemoteConnection): def __init__(self, remote_server_addr, keep_alive=False): super().__init__(remote_server_addr, keep_alive) # 创建不校验证书的SSL上下文 ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE # 替换HTTPS处理器使用自定义上下文 import urllib.request self._opener = urllib.request.build_opener(urllib.request.HTTPSHandler(context=ctx)) devicefarm_client = boto3.client('devicefarm', region_name='us-west-2', verify=False) testgrid_url_response = devicefarm_client.create_test_grid_url(projectArn="<insert_arn_here>", expiresInSeconds=120) desired_capabilities = DesiredCapabilities.CHROME desired_capabilities['platform'] = 'windows' desired_capabilities['acceptInsecureCerts'] = True # 使用自定义连接类初始化Remote driver = Remote( command_executor=InsecureTestGridConnection(testgrid_url_response['url']), desired_capabilities=desired_capabilities ) driver.get('https://www.google.com') driver.quit()
如果是测试场景不需要考虑全局影响,也可以选择更简单的全局修改方式,在初始化Remote前添加一行代码即可关闭所有SSL校验:
ssl._create_default_https_context = ssl._create_unverified_context
可选排查补充
如果修改后仍出现相同报错,可检查Lambda的VPC配置:
- 确认Lambda所在子网的路由表、安全组允许访问公网的443端口
- 确认VPC内没有自定义DNS解析、透明代理等组件导致TestGrid域名被解析为非官方IP
内容的提问来源于stack exchange,提问作者kashmoney
相关产品推荐
相关产品推荐

