OSMnx调用Nominatim遇SSL证书验证失败错误求助
解决OSMnx调用Nominatim时的SSL证书验证错误
你遇到的这个SSL证书验证失败的问题,大概率是因为本地CA证书库未包含Nominatim服务器的最新证书,或者你只修改了OSMnx源码中一处请求的verify参数,没覆盖到所有请求场景。下面给你几个可行的解决方法,按推荐优先级排序:
1. 更新本地CA证书(最安全的方案)
这是最稳妥的解决方式,从根源上修复证书信任问题:
- Linux(Debian/Ubuntu系):执行终端命令更新证书库
sudo apt-get update && sudo apt-get install --reinstall ca-certificates - Windows:通过「设置 → 更新和安全 → Windows更新」安装系统更新,或者手动下载Nominatim服务器的根证书并添加到系统信任存储
- macOS:打开「钥匙串访问」,导入并信任Nominatim的根证书,或者执行终端命令更新系统证书
security find-certificate -a -p /Library/Keychains/System.keychain > /tmp/ca-bundle.crt && sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /tmp/ca-bundle.crt
2. 通过OSMnx配置全局设置请求参数(无需修改源码)
如果你暂时无法更新证书,可以通过OSMnx的配置功能,让所有内部请求都跳过SSL验证,比修改源码更可靠:
import osmnx as ox import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning # 禁用不安全请求的警告(可选,避免控制台刷屏) requests.packages.urllib3.disable_warnings(InsecureRequestWarning) # 全局设置OSMnx的请求参数,跳过SSL验证 ox.config(requests_kwargs={"verify": False}) # 你的原有代码 location_point = (29.6849782, -95.3991907) G = ox.graph_from_point(location_point, distance=737884.22, distance_type='bbox', network_type='drive') G = ox.project_graph(G) fig, ax = ox.plot_graph(G, node_size=0, node_color='#66CCFF',fig_height=10,fig_width=12,margin=0.03,dpi=150,save=True,file_format='png',show=True,filename='Harvey_map')
3. 更换Nominatim实例
如果官方Nominatim服务器的证书确实存在问题,可以切换到其他公开的Nominatim镜像服务:
import osmnx as ox # 设置自定义的Nominatim服务地址(示例为英国镜像) ox.config(nominatim_url="https://nominatim.openstreetmap.org.uk/search") # 后续代码保持不变 location_point = (29.6849782, -95.3991907) # ... 其余代码
为什么你修改core.py没用?
OSMnx在多个模块(比如nominatim.py、utils.py等)中都会调用requests.get发送请求,你只修改了core.py中的一处,其他模块的请求仍然会走默认的证书验证逻辑,所以问题没解决。而通过ox.config(requests_kwargs={"verify": False})会把这个参数传递给所有OSMnx发起的请求,覆盖所有场景。
⚠️ 注意:跳过SSL验证会带来安全风险,建议仅在测试或应急场景下使用,生产环境优先采用更新CA证书的方案。
内容的提问来源于stack exchange,提问作者Vondoe79
相关产品推荐
相关产品推荐

