[Trac_gajim-plugins] [Gajim Plugins] #156: SSL: CERTIFICATE_VERIFY_FAILED on http_upload

Gajim Plugins trac at gajim.org
Sun Nov 13 17:17:47 CET 2016


#156: SSL: CERTIFICATE_VERIFY_FAILED on http_upload
-------------------------+-------------------------------------------------
  Reporter:  marcus@…    |      Owner:
      Type:  defect      |     Status:  new
  Priority:  normal      |  Component:  HttpUploadPlugin
Resolution:              |   Keywords:  http_upload,
                         |  CERTIFICATE_VERIFY_FAILED
Blocked By:              |   Blocking:
-------------------------+-------------------------------------------------
Description changed by Darlan:

Old description:

> Version: Gajim 0.16.6
> OS: Linux / Windows 7
> Server: ejabberd
>
> When uploading file with http_upload I get following error:
> ```
> Exception in thread Thread-61:
> Traceback (most recent call last):
>   File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
>     self.run()
>   File "/usr/lib/python2.7/threading.py", line 763, in run
>     self.__target(*self.__args, **self.__kwargs)
>   File "/usr/share/gajim/src/gui_interface.py", line 3117, in
> thread_function
>     output = func(*func_args)
>   File
> "/home/opolch/.local/share/gajim/plugins/httpupload/httpupload.py", line
> 488, in uploader
>     transfer = urllib2.urlopen(request, timeout=30)
>   File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
>     return opener.open(url, data, timeout)
>   File "/usr/lib/python2.7/urllib2.py", line 431, in open
>     response = self._open(req, data)
>   File "/usr/lib/python2.7/urllib2.py", line 449, in _open
>     '_open', req)
>   File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain
>     result = func(*args)
>   File "/usr/lib/python2.7/urllib2.py", line 1240, in https_open
>     context=self._context)
>   File "/usr/lib/python2.7/urllib2.py", line 1197, in do_open
>     raise URLError(err)
> URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate
> verify failed (_ssl.c:590)>
>
> After changing function def_uploader(): as shown below it works. This
> means to not verify the certificate anymore. Is that the recommended way
> for a unsigned cert?
>
> def uploader():
>                 progress_messages.put(_('Uploading file via HTTP...'))
>                 try:
>                     #################################
>                     # SSL_CERTIFICATE_ERROR fix
>                     context = ssl.create_default_context()
>                     context.check_hostname = False
>                     context.verify_mode = ssl.CERT_NONE
>                     #################################
>                     headers = {'User-Agent': 'Gajim %s' % gajim.version,
> 'Content-Type': mime_type}
>                     request =
> urllib2.Request(put.getData().encode("utf-8"), data=data,
> headers=headers)
>                     request.get_method = lambda: 'PUT'
>                     log.debug("opening urllib2 upload request...")
>                     transfer = urllib2.urlopen(request, timeout=30,
> context=context)
>                     #transfer = urllib2.urlopen(request, timeout=30)
>                     log.debug("urllib2 upload request done, response
> code: " + str(transfer.getcode()))
>                     return transfer.getcode()
>
> Here is the ejabberd conf:
>
> module: ejabberd_http
> port: 5443
> tls: true
> certfile: "/etc/ejabberd/ejabberd.pem"
> request_handlers:
>   "": mod_http_upload
> ```
> Regards,
>  Oliver

New description:

 Version: Gajim 0.16.6
 OS: Linux / Windows 7
 Server: ejabberd

 When uploading file with http_upload I get following error:
 {{{
 Exception in thread Thread-61:
 Traceback (most recent call last):
   File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
     self.run()
   File "/usr/lib/python2.7/threading.py", line 763, in run
     self.__target(*self.__args, **self.__kwargs)
   File "/usr/share/gajim/src/gui_interface.py", line 3117, in
 thread_function
     output = func(*func_args)
   File "/home/opolch/.local/share/gajim/plugins/httpupload/httpupload.py",
 line 488, in uploader
     transfer = urllib2.urlopen(request, timeout=30)
   File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
     return opener.open(url, data, timeout)
   File "/usr/lib/python2.7/urllib2.py", line 431, in open
     response = self._open(req, data)
   File "/usr/lib/python2.7/urllib2.py", line 449, in _open
     '_open', req)
   File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain
     result = func(*args)
   File "/usr/lib/python2.7/urllib2.py", line 1240, in https_open
     context=self._context)
   File "/usr/lib/python2.7/urllib2.py", line 1197, in do_open
     raise URLError(err)
 URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate
 verify failed (_ssl.c:590)>

 After changing function def_uploader(): as shown below it works. This
 means to not verify the certificate anymore. Is that the recommended way
 for a unsigned cert?

 def uploader():
                 progress_messages.put(_('Uploading file via HTTP...'))
                 try:
                     #################################
                     # SSL_CERTIFICATE_ERROR fix
                     context = ssl.create_default_context()
                     context.check_hostname = False
                     context.verify_mode = ssl.CERT_NONE
                     #################################
                     headers = {'User-Agent': 'Gajim %s' % gajim.version,
 'Content-Type': mime_type}
                     request =
 urllib2.Request(put.getData().encode("utf-8"), data=data, headers=headers)
                     request.get_method = lambda: 'PUT'
                     log.debug("opening urllib2 upload request...")
                     transfer = urllib2.urlopen(request, timeout=30,
 context=context)
                     #transfer = urllib2.urlopen(request, timeout=30)
                     log.debug("urllib2 upload request done, response code:
 " + str(transfer.getcode()))
                     return transfer.getcode()

 Here is the ejabberd conf:

 module: ejabberd_http
 port: 5443
 tls: true
 certfile: "/etc/ejabberd/ejabberd.pem"
 request_handlers:
   "": mod_http_upload
 }}}
 Regards,
  Oliver

--

--
Ticket URL: <http://trac-plugins.gajim.org/ticket/156#comment:2>
Gajim Plugins <http://trac-plugins.gajim.org/>
Gajim Plugins


More information about the Trac_gajim-plugins mailing list