首页 文章

python的SSL错误

提问于
浏览
0

我想用这段代码登录我的大学门户网站:

import requests

        with requests.Session() as c:
            url = 'https://myunihub.mdx.ac.uk/'
            usern = 'USERNAME'
            passw = 'PASSWORD'
            c.get(url)
            csrftoken = c.cookies['csrftoken']
            login_data = dict(csrfmiddlewaretoken=csrftoken, username=usern, password=passw)
            c.post(url, data=login_data, headers={'Referer': 'https://myunihub-1.mdx.ac.uk/cas-web/login?service=https%3A%2F%2Fmyunihub.mdx.ac.uk%2Fc%2Fportal%2Flogin'})
            page = c.get('https://myunihub.mdx.ac.uk/web/home-community', verify=False)
            print page.content

但是当我尝试时会出现此错误:

引发SSLError(e,request = request)SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:590)

1 回答

  • 3

    你有没有尝试过

    c.get(url, verify=False)
    

    从文档:

    如果将verify设置为False,请求也可以忽略验证SSL证书 . >>> requests.get('https://kennethreitz.com',verify = False)
    <Response [200]>
    默认情况下,verify设置为True .

    资料来源:http://docs.python-requests.org/en/v1.0.4/user/advanced/#ssl-cert-verification

    我建议忽略证书,因为你已经在代码的这一行中这样做了:

    page = c.get('https://myunihub.mdx.ac.uk/web/home-community', verify=False)
    

    但是,如果您要验证证书,则可以将颁发证书的证书颁发机构的中间证书下载到您的学校 . 在这种情况下,它是http://crt.tcs.terena.org/TERENASSLCA.crt

    enter image description here

    (requestsssl)macbook:requestsssl joeyoung$ curl -O http://crt.tcs.terena.org/TERENASSLCA.crt
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  1180  100  1180    0     0   1940      0 --:--:-- --:--:-- --:--:--  1947
    (requestsssl)macbook:requestsssl joeyoung$ ls -al
    total 8
    drwxr-xr-x   3 joeyoung  staff   102 Oct  5 22:22 .
    drwxr-xr-x  66 joeyoung  staff  2244 Oct  5 22:21 ..
    -rw-r--r--   1 joeyoung  staff  1180 Oct  5 22:22 TERENASSLCA.crt
    

    然后,您需要将证书添加到CA BUNDLE . 该过程因操作系统而异 . 这是一个很好的链接,为此分步指南:http://kb.kerio.com/product/kerio-connect/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html

    我在OS X上,所以我会做以下事情:

    (requestsssl)macbook:requestsssl joeyoung$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ./TERENASSLCA.crt
    

    安装了证书后,我可以使用 verify=True 没有问题:

    (requestsssl)macbook:requestsssl joeyoung$ python
    Python 2.7.10 (default, Jul 14 2015, 19:46:27) 
    [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> r = requests.get('https://myunihub-1.mdx.ac.uk', verify=True)
    >>> r.text
    u'\n<!DOCTYPE html>\n\n\n<html lang="en">\n    <head>\n        <title>Apache Tomcat/7.0.39</title>\n        <link href="favicon.ico" rel="icon" type="image/x-icon" />\n        <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />\n        <link href="tomcat.css" rel="stylesheet" type="text/css" />\n    </head>\n\n    <body>\n        <div id="wrapper">\n            <div id="navigation" class="curved container">\n                <span id="nav-home"><a href="http://tomcat.apache.org/">Home</a></span>\n                <span id="nav-hosts"><a href="/docs/">Documen
    ...
    

相关问题