Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)

I am trying to use the betbrain.py from Github (https://github.com/gto76/betbrain-scraper) that has the following code:

#!/usr/bin/python3 # # Usage: betbrain.py [URL or FILE] [OUTPUT-FILE] # Scrapes odds from passed betbrain page and writes them to # stdout, or file if specified.  import os import sys import urllib.request   from bs4 import BeautifulSoup from http.cookiejar import CookieJar  import parser_betbrain import printer  DEFAULT_URL = 'https://www.betbrain.com/football/england/premier-league/#!/matches/'   # If no arguments are present, it parses the default page. # Argument can be an URL or a local file. def main():   html = getHtml(sys.argv)   soup = BeautifulSoup(html, "html.parser")   matches = parser_betbrain.getMatches(soup)   string = printer.matchesToString(matches)   output(string, sys.argv)  def getHtml(argv):   if len(argv) <= 1:     return scrape(DEFAULT_URL)   elif argv[1].startswith("http"):     return scrape(argv[1])   else:     return readFile(argv[1])  # Returns html file located at URL. def scrape(url):   cj = CookieJar()   opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))   try:     return opener.open(url)   except ValueError:     error("Invalid URL: " + url)  def readFile(path):   try:     return open(path, encoding='utf8')   except IOError:     error("Invalid input filename: " + path)  def output(string, argv):   if len(argv) <= 2:     print(string)   else:     writeFile(argv[2], string)  def writeFile(path, string):   try:       fo = open(path, "w", encoding='utf8')     fo.write(string);     fo.close()   except IOError:     error("Invalid output filename: " + path)  def error(msg):   msg = os.path.basename(__file__)+": "+msg   print(msg, file=sys.stderr)   sys.exit(1)  if __name__ == '__main__':   main() 

However when run it comes back with this error

Traceback (most recent call last):   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1318, in do_open     encode_chunked=req.has_header('Transfer-encoding'))   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1239, in request     self._send_request(method, url, body, headers, encode_chunked)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1285, in _send_request     self.endheaders(body, encode_chunked=encode_chunked)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1234, in endheaders     self._send_output(message_body, encode_chunked=encode_chunked)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1026, in _send_output     self.send(msg)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 964, in send     self.connect()   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1400, in connect     server_hostname=server_hostname)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 401, in wrap_socket     _context=self, _session=session)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 808, in __init__     self.do_handshake()   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 1061, in do_handshake     self._sslobj.do_handshake()   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 683, in do_handshake     self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)  During handling of the above exception, another exception occurred:  Traceback (most recent call last):   File "/Users/Daniel/Desktop/betbrain-scraper-master 2/betbrain.py", line 71, in <module>     main()   File "/Users/Daniel/Desktop/betbrain-scraper-master 2/betbrain.py", line 22, in main     html = getHtml(sys.argv)   File "/Users/Daniel/Desktop/betbrain-scraper-master 2/betbrain.py", line 30, in getHtml     return scrape(DEFAULT_URL)   File "/Users/Daniel/Desktop/betbrain-scraper-master 2/betbrain.py", line 41, in scrape     return opener.open(url)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 526, in open     response = self._open(req, data)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 544, in _open     '_open', req)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain     result = func(*args)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1361, in https_open     context=self._context, check_hostname=self._check_hostname)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1320, in do_open     raise URLError(err) urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)> 

How can I fix this problem? I am running Python 3.6.0 on MacOS 10.12.1

like image 299
Dan Little Avatar asked Jan 17 '17 07:01

Dan Little


People also ask

Why SSL certificate_ verify_ failed?

What Causes an SSL Certificate_Verify_Failed Error? SSL certificate_verify_failed errors typically occur as a result of outdated Python default certificates or invalid root certificates. If you're a website owner and you're receiving this error, it could be because you're not using a valid SSL certificate.

What does certificate verify failed mean?

The Ruby OpenSSL error certificate verify failed means your code can't verify that the SSL certificate of the website or API you're connecting to is the real one. It's important to solve this issue correctly to keep your communication secure.

What does OpenSSL cert verify error mean?

An SSL certificate error occurs when the browser cannot verify the SSL certificates returned by the server. When the error happens, the browser blocks the website and warns the user that the website cannot be trusted as shown below. These warnings will negatively impact the user's trust in your website.


2 Answers

I ran this on MacOS /Applications/Python\ 3.6/Install\ Certificates.command

like image 20
Nagalakshmi Srirama Avatar answered Sep 20 '22 00:09

Nagalakshmi Srirama


Open a terminal and take a look at:

/Applications/Python 3.6/Install Certificates.command 

Python 3.6 on MacOS uses an embedded version of OpenSSL, which does not use the system certificate store. More details here.

(To be explicit: MacOS users can probably resolve by opening Finder and double clicking Install Certificates.command)

like image 160
Scovetta Avatar answered Sep 17 '22 00:09

Scovetta