Virtualmin's letsencrypt request certificate returns non-string (type Error)

I think it was since last week that started getting errors on letsencrypt when requesting for new certificate on all domains. "only update renewal" button doesn't extend expiration date either.

I wasn't having any issue with it until like last week or so, seems like something's changed and broke internally? getting rejected on request of certificate. it now always throws these errors on all requests

ERROR:certbot._internal.log:An unexpected error occurred: ERROR:certbot._internal.log:TypeError: str returned non-string (type Error)

Here's the full letsencrypt error log:

2021-07-11 03:16:08,846:DEBUG:certbot._internal.main:certbot version: 1.11.0
2021-07-11 03:16:08,846:DEBUG:certbot._internal.main:Location of certbot entry point: /bin/letsencrypt
2021-07-11 03:16:08,846:DEBUG:certbot._internal.main:Arguments: ['-a', 'webroot', '-d', '', '-d', '', '--webroot-path', '/home/example/public_html', '--duplicate', '--force-renewal', '--manual-public-ip-logging$
2021-07-11 03:16:08,846:DEBUG:certbot._internal.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#manual,PluginEntryPoint#nginx,PluginEntryPoint#null,PluginEntryPoint#standalone,PluginEntryPoint#webroot)
2021-07-11 03:16:08,852:WARNING:certbot.util:Use of --manual-public-ip-logging-ok is deprecated.
2021-07-11 03:16:08,859:DEBUG:certbot._internal.log:Root logging level set at 20
2021-07-11 03:16:08,859:INFO:certbot._internal.log:Saving debug log to /var/log/letsencrypt/letsencrypt.log
2021-07-11 03:16:08,860:DEBUG:certbot._internal.plugins.selection:Requested authenticator webroot and installer None
2021-07-11 03:16:08,861:DEBUG:certbot._internal.plugins.selection:Single candidate plugin: * webroot
Description: Place files in webroot directory
Interfaces: IAuthenticator, IPlugin
Entry point: webroot = certbot._internal.plugins.webroot:Authenticator
Prep: True
2021-07-11 03:16:08,861:DEBUG:certbot._internal.plugins.selection:Selected authenticator  and installer None
2021-07-11 03:16:08,861:INFO:certbot._internal.plugins.selection:Plugins selected: Authenticator webroot, Installer None
2021-07-11 03:16:08,876:DEBUG:certbot._internal.main:Picked account: 
    load_entry_point('certbot==1.11.0', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/certbot/", line 15, in main
    return internal_main.main(cli_args)
  File "/usr/lib/python2.7/site-packages/certbot/_internal/", line 1421, in main
    return config.func(config, plugins)
  File "/usr/lib/python2.7/site-packages/certbot/_internal/", line 1277, in certonly
    le_client = _init_le_client(config, auth, installer)
  File "/usr/lib/python2.7/site-packages/certbot/_internal/", line 659, in _init_le_client
    return client.Client(config, acc, authenticator, installer, acme=acme)
  File "/usr/lib/python2.7/site-packages/certbot/_internal/", line 255, in __init__
    acme = acme_from_config_key(config, self.account.key, self.account.regr)
  File "/usr/lib/python2.7/site-packages/certbot/_internal/", line 43, in acme_from_config_key
    return acme_client.BackwardsCompatibleClientV2(net, key, config.server)
  File "/usr/lib/python2.7/site-packages/acme/", line 831, in __init__
    directory = messages.Directory.from_json(net.get(server).json())
  File "/usr/lib/python2.7/site-packages/acme/", line 1168, in get
    self._send_request('GET', url, **kwargs), content_type=content_type)
  File "/usr/lib/python2.7/site-packages/acme/", line 1118, in _send_request
    response = self.session.request(method, url, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/", line 486, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/site-packages/requests/", line 598, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/", line 370, in send
  File "/usr/lib/python2.7/site-packages/urllib3/", line 544, in urlopen
    body=body, headers=headers)
  File "/usr/lib/python2.7/site-packages/urllib3/", line 344, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
  File "/usr/lib/python2.7/site-packages/urllib3/", line 314, in _raise_timeout
    if 'timed out' in str(err) or 'did not complete (read)' in str(err):  # Python 2.6
TypeError: __str__ returned non-string (type Error)
2021-07-11 03:16:08,922:ERROR:certbot._internal.log:An unexpected error occurred:
2021-07-11 03:16:08,922:ERROR:certbot._internal.log:TypeError: __str__ returned non-string (type Error)

I noticed that it's not just this server, my other identical setup a later built server started having this same error recently. somehow I got lucky enough that new domains were added to the current certificate. I remember hitting these buttons again and again out of frustration - request certificate and update renewal buttons, vice versa.

Any idea why it's happening suddenly on centos 7 nginx setup?

Closed (works as designed)
Virtualmin version: 
Webmin version: 


Ilia's picture
Submitted by Ilia on Sun, 07/11/2021 - 08:37


The error manual-public-ip-logging-ok should never come with the latest Webmin installed, and thus this is confusing.

The other errors seem to be Python related. There are various reason for that, however, that's not really a Virtualmin issue, and isn't something we'd be able to assist with here in the support tracker. We'd suggest asking this same question on Virtualmin Community Forums to get support with it.

Besides, double check that the latest system package updates are installed.