请教一下,为什么只有我的电脑跑爬虫会出现 SSLCertVerificationError ? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tankb52
V2EX    Python

请教一下,为什么只有我的电脑跑爬虫会出现 SSLCertVerificationError ?

  •  
  •   tankb52 2019-08-19 16:51:18 +08:00 6034 次点击
    这是一个创建于 2253 天前的主题,其中的信息可能已经有所发展或是发生改变。

    具体报错信息如下

    requests.exceptions.SSLError: HTTPSConnectionPool(host='www.amazon.com', port=443): Max retries exceeded with url: /product-reviews/B07GBP3GH9/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)' 

    爬一些亚马逊上评论会出现这个错误(是自家产品,不涉及侵权),在 r = requests.get(self.url + str(page_n), headers=header, timeout=30)最后面添加, verify = False 就不会报错。

    只在我的电脑上出现这个问题,其他同事的电脑上运行正常。

    同时发现我电脑上pip install moudlename时也会报这个错误。搜索以后已经将 pip 升级到 19.2.2,或者说是所有的模块都已更新到最新。 最后解决方案是在 pip.ini 中加入以下内容

    [global] trusted-host = pypi.python.org pypi.org files.pythonhosted.org 

    但是爬虫依然有问题,我电脑换用同事的网络也不行,走手机热点电信网络也不行。

    我怀疑是我电脑上某个证书出问题了,怎么排查呢? 最开始在自己电脑上鼓捣爬虫时动过很多设置,这次脚本是同事发过来的,在别人电脑上跑都通过了。

    第 1 条附言    2019-08-19 18:25:19 +08:00
    Windows 10 系统。
    同事的 Mac 和 Windows 10 都没问题。
    我自己添加 verify = False 就不会报错。
    但我还是想找到原因,毕竟也影响到了 pip install。
    32 条回复    2019-10-29 09:18:53 +08:00
    warcraft1236
        1
    warcraft1236  
       2019-08-19 16:54:53 +08:00
    是不是有代理啥的,劫持了证书。然后系统里边是不是安装了什么第三方证书,然后配置的还不对?只想到这些了,你的问题还真没遇到过
    jackleeforce3615
        2
    jackleeforce3615  
       2019-08-19 17:08:51 +08:00
    def init_ssl():
    ssl._create_default_https_cOntext= ssl._create_unverified_context
    jackleeforce3615
        3
    jackleeforce3615  
       2019-08-19 17:09:20 +08:00
    上面这个函数有没有执行过?
    tankb52
        4
    tankb52  
    OP
       2019-08-19 17:21:12 +08:00
    @warcraft1236 #1
    我也怀疑是这个原因,那如何排查呢?
    tankb52
        5
    tankb52  
    OP
       2019-08-19 17:22:57 +08:00
    @jackleeforce3615 #2 加了也是一样的报错。
    wongyusing
        6
    wongyusing  
       2019-08-19 17:27:53 +08:00
    这个我没记错应该是证书问题。
    试一下把 https 改成 http。
    上次我就这样解决了
    不行的话,查一下配置证书方面的知识
    BigDogWang
        7
    BigDogWang  
       2019-08-19 17:34:11 +08:00
    你用的 request 吗?直接参数声明不做 ssl 检查就可以了
    lusi1990
        8
    lusi1990  
       2019-08-19 17:36:33 +08:00
    是 linux 吗?是自己编译的吗?如果是的话
    sudo apt-get install -y openssl
    sudo apt-get install -y libssl-dev
    sudo apt-get install -y zlib*
    然后重新编译, 安装
    sodora
        9
    sodora  
       2019-08-19 17:59:22 +08:00 via Android
    可能是系统时间问题。当前系统时间处在证书有效期之外。
    tankb52
        10
    tankb52  
    OP
       2019-08-19 18:26:33 +08:00
    @BigDogWang #7
    是添加 verify = False 吗?添加了就不会报错。但我还是想到的原因。
    tankb52
        11
    tankb52  
    OP
       2019-08-19 18:27:16 +08:00
    @lusi1990 #8
    windows 10,同事的 Mac 和 windows 10 上面也不会报错,所以不应该是 系统问题。
    supervipcard
        12
    supervipcard  
       2019-08-19 18:45:05 +08:00
    重装下 Python 试试
    Keyes
        13
    Keyes  
       2019-08-19 19:03:40 +08:00
    @tankb52 把证书 dump 出来,看一下 issue 是谁的,可能性比较大的是缺少了中级证书,另一个就是网关上有中间人
    tankb52
        14
    tankb52  
    OP
       2019-08-19 19:23:02 +08:00
    @Keyes #13

    这个?为什么别人没有问题呢?

    DO_NOT_TRUST_FiddlerRoot
    DO_NOT_TRUST_BC
    Created by http://www.fiddler2.com
    tankb52
        15
    tankb52  
    OP
       2019-08-19 19:23:20 +08:00
    @supervipcard #12 重装过,无效。
    Keyes
        16
    Keyes  
       2019-08-19 19:34:01 +08:00
    @tankb52 因为别人把 FiddlerRoot 证书导入到可信证书列表中了

    你导入 Fiddler 证书的时候,不要让系统自动选择存储区域,点手动选择,然后指定到受信任的根证书颁发机构
    lazyfighter
        17
    lazyfighter  
       2019-08-19 20:24:45 +08:00
    貌似需要导入 fiddler 的根证书才行
    tankb52
        18
    tankb52  
    OP
       2019-08-19 20:26:50 +08:00
    @Keyes #16
    导入后需要重启系统吗?我从 firefox 中导出 amazon.com 的证书到本地,然后双击安装,选择指定到了受信任的根证书颁发机构。
    但是重新运行脚本还是报错。
    huyinjie
        19
    huyinjie  
       2019-08-19 20:28:07 +08:00
    可以尝试下用这个软件重置下网络 https://www.rizonesoft.com/downloads/complete-internet-repair/
    Keyes
        20
    Keyes  
       2019-08-19 21:55:01 +08:00
    @tankb52 导 Fiddler 的证书,不是 Amazon 的

    fiddler ca 可能在不信任的列表中,把它移到信任里也可以
    ThirdFlame
        21
    ThirdFlame  
       2019-08-19 22:29:56 +08:00
    难道设置了全局代理到 fiddle ?
    tankb52
        22
    tankb52  
    OP
       2019-08-19 23:37:31 +08:00 via Android
    @Keyes
    @ThirdFlame

    公司的网络应该是统一走 fiddle 的,但是只有我的电脑出问题就很奇怪了。

    我明天再去看看
    ThirdFlame
        23
    ThirdFlame  
       2019-08-20 08:35:49 +08:00
    @tankb52 那就是你没有信任 fiddle 的证书问题而已。
    lusi1990
        24
    lusi1990  
       2019-08-20 09:41:26 +08:00
    原来是走了 fiddler, 你需要的是 fiddler 的证书
    resp = requests.get('https://ipinfo.io/json', verify='fiddler.cer',proxies=proxy)
    tankb52
        25
    tankb52  
    OP
       2019-08-20 10:45:04 +08:00
    @ThirdFlame #23
    @lusi1990 #24
    请问如何做呢?
    本地没有 fiddler.cer 。
    我执行后错误如下
    OSError: Could not find a suitable TLS CA certificate bundle, invalid path: fiddler.cer
    lusi1990
        26
    lusi1990  
       2019-08-20 11:22:58 +08:00   1
    @tankb52 这个是你们公司提供给你了, 名字可能不叫这个, fiddler 证书的默认名字应该是 "FiddlerRoot.cer", verify 是证书 "FiddlerRoot.cer" 的路径
    tankb52
        27
    tankb52  
    OP
       2019-08-20 11:34:34 +08:00
    @lusi1990 #26
    好的,多谢了。
    我去想办法,不行再找公司 IT.
    foxyier
        28
    foxyier  
       2019-08-21 09:54:50 +08:00
    把抓包工具关了再试一下呢。。
    tankb52
        29
    tankb52  
    OP
       2019-08-21 11:14:44 +08:00 via Android
    @foxyier
    公司层级的,不是我电脑上的
    foxyier
        30
    foxyier  
       2019-08-21 13:25:32 +08:00
    @tankb52 你都说了你同事电脑都没问题。那就肯定是你电脑的问题啊。。为啥问题是公司层级呢? 公司层级的话不是都应该有问题么
    tankb52
        31
    tankb52  
    OP
       2019-08-21 15:35:35 +08:00 via Android
    @foxyier
    我的意思是说抓包工具是公司层级上部署的,我关不掉。

    至于我电脑上确实是出问题,只是我找不到原因。
    dapan24678
        32
    dapan24678  
       2019-10-29 09:18:53 +08:00
    @warcraft1236 老哥 666,确实 本机开代理会影响 ssl 验证
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2491 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 11:11 PVG 19:11 LAX 04:11 JFK 07:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86