Unexpected error: An object does not implement interface


While renewing my certificates I’m getting the error below.
I’ve added logs at the bottom for info.

Thank you for your help!

My domain is: moua7.com

I ran this command: certbot -q renew

It produced this output: 2016-11-10 01:43:24,141:WARNING:certbot.renewal:Attempting to renew cert from /etc/letsencrypt/renewal/ddx4.moua7.com.conf produced an unexpected error: An object does not implement interface

My operating system is (include version): debian 8.6

My web server is (include version): standalone

My hosting provider, if applicable, is:

I can login to a root shell on my machine (yes or no, or I don’t know): yes

I’m using a control panel to manage my site (no, or provide the name and version of the control panel): no

2016-11-10 00:43:24,034:DEBUG:certbot.main:Root logging level set at 30
2016-11-10 00:43:24,034:INFO:certbot.main:Saving debug log to /var/log/letsencrypt/letsencrypt.log
2016-11-10 00:43:24,035:DEBUG:certbot.main:certbot version: 0.8.1
2016-11-10 00:43:24,035:DEBUG:certbot.main:Arguments: [’-q’]
2016-11-10 00:43:24,036:DEBUG:certbot.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#webroot,PluginEntryPoint#null,PluginEntryPoint#manual,PluginEntryPoint#standalone)
2016-11-10 00:43:24,055:DEBUG:certbot.plugins.selection:Requested authenticator <certbot.cli._Default object at 0x7f83a8e08910> and installer <certbot.cli._Default object at 0x7f83a8e08910>
2016-11-10 00:43:24,055:DEBUG:certbot.cli:Default Detector is Namespace(account=<certbot.cli._Default object at 0x7f83a8e6db90>, agree_dev_preview=None, allow_subset_of_names=<certbot.cli._Default object at 0x7f83a8e6d950>, apache=<certbot.cli._Default object at 0x7f83a8e08a10>, authenticator=<certbot.cli._Default object at 0x7f83a8e08910>, break_my_certs=<certbot.cli._Default object at 0x7f83a8dff4d0>, cert_path=<certbot.cli._Default object at 0x7f83a8e03dd0>, chain_path=<certbot.cli._Default object at 0x7f83a8e08110>, checkpoints=<certbot.cli._Default object at 0x7f83a8e038d0>, config_dir=<certbot.cli._Default object at 0x7f83a8e08210>, config_file=None, configurator=<certbot.cli._Default object at 0x7f83a8e08910>, csr=<certbot.cli._Default object at 0x7f83a8e037d0>, debug=<certbot.cli._Default object at 0x7f83a8dff0d0>, dialog_mode=<certbot.cli._Default object at 0x7f83a8e50f50>, domains=<certbot.cli._Default object at 0x7f83a8e6d490>, dry_run=<certbot.cli._Default object at 0x7f83a8e6d090>, duplicate=<certbot.cli._Default object at 0x7f83a8e6dc90>, email=<certbot.cli._Default object at 0x7f83a8e6d390>, expand=<certbot.cli._Default object at 0x7f83a8e6d690>, fullchain_path=<certbot.cli._Default object at 0x7f83a8e03fd0>, func=<function renew at 0x7f83a935b230>, hsts=<certbot.cli._Default object at 0x7f83a8dff9d0>, http01_port=<certbot.cli._Default object at 0x7f83a8dff3d0>, ifaces=<certbot.cli._Default object at 0x7f83a8e03bd0>, init=<certbot.cli._Default object at 0x7f83a8e039d0>, installer=<certbot.cli._Default object at 0x7f83a8e08910>, key_path=<certbot.cli._Default object at 0x7f83a8e03ed0>, logs_dir=<certbot.cli._Default object at 0x7f83a8e08410>, manual=<certbot.cli._Default object at 0x7f83a8e08d10>, manual_public_ip_logging_ok=<certbot.cli._Default object at 0x7f83a8e03990>, manual_test_mode=<certbot.cli._Default object at 0x7f83a8e03b50>, must_staple=<certbot.cli._Default object at 0x7f83a8dff6d0>, nginx=<certbot.cli._Default object at 0x7f83a8e08b10>, no_self_upgrade=<certbot.cli._Default object at 0x7f83a8e6de90>, no_verify_ssl=<certbot.cli._Default object at 0x7f83a8dff1d0>, noninteractive_mode=<certbot.cli._Default object at 0x7f83a8e50e50>, num=<certbot.cli._Default object at 0x7f83a8e035d0>, os_packages_only=<certbot.cli._Default object at 0x7f83a8e6dd90>, post_hook=<certbot.cli._Default object at 0x7f83a8e03210>, pre_hook=<certbot.cli._Default object at 0x7f83a8e03110>, prepare=<certbot.cli._Default object at 0x7f83a8e03ad0>, quiet=True, redirect=<certbot.cli._Default object at 0x7f83a8dff7d0>, register_unsafely_without_email=<certbot.cli._Default object at 0x7f83a8e6d190>, reinstall=<certbot.cli._Default object at 0x7f83a8e6d590>, renew_by_default=<certbot.cli._Default object at 0x7f83a8e6d850>, renew_hook=<certbot.cli._Default object at 0x7f83a8e03310>, rsa_key_size=<certbot.cli._Default object at 0x7f83a8dff5d0>, server=<certbot.cli._Default object at 0x7f83a8e08510>, staging=<certbot.cli._Default object at 0x7f83a8e08610>, standalone=<certbot.cli._Default object at 0x7f83a8e08c10>, standalone_supported_challenges=<certbot.cli._Default object at 0x7f83a8e03b90>, staple=<certbot.cli._Default object at 0x7f83a8dffdd0>, strict_permissions=<certbot.cli._Default object at 0x7f83a8dfffd0>, text_mode=<certbot.cli._Default object at 0x7f83a8e50d50>, tls_sni_01_port=<certbot.cli._Default object at 0x7f83a8dff2d0>, tos=<certbot.cli._Default object at 0x7f83a8e6da90>, uir=<certbot.cli._Default object at 0x7f83a8dffbd0>, update_registration=<certbot.cli._Default object at 0x7f83a8e6d290>, user_agent=<certbot.cli._Default object at 0x7f83a8e036d0>, validate_hooks=<certbot.cli._Default object at 0x7f83a8e03410>, verb=‘renew’, verbose_count=<certbot.cli._Default object at 0x7f83a8e50c90>, webroot=<certbot.cli._Default object at 0x7f83a8e08e10>, webroot_map=<certbot.cli._Default object at 0x7f83a8e03d50>, webroot_path=<certbot.cli._Default object at 0x7f83a8e03f50>, work_dir=<certbot.cli._Default object at 0x7f83a8e08310>)
2016-11-10 00:43:24,060:DEBUG:parsedatetime:parse (top of loop): [30 days][]
2016-11-10 00:43:24,066:DEBUG:parsedatetime:CRE_UNITS matched
2016-11-10 00:43:24,066:DEBUG:parsedatetime:parse (bottom) [][30 days][][]
2016-11-10 00:43:24,067:DEBUG:parsedatetime:weekday False, dateStd False, dateStr False, time False, timeStr False, meridian False
2016-11-10 00:43:24,067:DEBUG:parsedatetime:dayStr False, modifier False, modifier2 False, units True, qunits False
2016-11-10 00:43:24,067:DEBUG:parsedatetime:_evalString(30 days, time.struct_time(tm_year=2016, tm_mon=11, tm_mday=10, tm_hour=0, tm_min=43, tm_sec=24, tm_wday=3, tm_yday=315, tm_isdst=0))
2016-11-10 00:43:24,067:DEBUG:parsedatetime:_buildTime: [30 ][][days]
2016-11-10 00:43:24,067:DEBUG:parsedatetime:units days --> realunit days
2016-11-10 00:43:24,067:DEBUG:parsedatetime:return
2016-11-10 00:43:24,067:DEBUG:certbot.storage:Should renew, less than 30 days before certificate expiry 2016-11-28 20:53:00 UTC.
2016-11-10 00:43:24,067:INFO:certbot.renewal:Cert is due for renewal, auto-renewing…
2016-11-10 00:43:24,078:DEBUG:certbot.plugins.selection:Requested authenticator None and installer standalone
2016-11-10 00:43:24,141:WARNING:certbot.renewal:Attempting to renew cert from /etc/letsencrypt/renewal/ddx4.moua7.com.conf produced an unexpected error: An object does not implement interface

    . Skipping.

2016-11-10 00:43:24,143:DEBUG:certbot.renewal:Traceback was:
Traceback (most recent call last):
File “/usr/lib/python2.7/dist-packages/certbot/renewal.py”, line 346, in renew_all_lineages
main.obtain_cert(lineage_config, plugins, renewal_candidate)
File “/usr/lib/python2.7/dist-packages/certbot/main.py”, line 546, in obtain_cert
installer, auth = plug_sel.choose_configurator_plugins(config, plugins, “certonly”)
File “/usr/lib/python2.7/dist-packages/certbot/plugins/selection.py”, line 187, in choose_configurator_plugins
installer = pick_installer(config, req_inst, plugins)
File “/usr/lib/python2.7/dist-packages/certbot/plugins/selection.py”, line 31, in pick_installer
config, default, plugins, question, (interfaces.IInstaller,))
File “/usr/lib/python2.7/dist-packages/certbot/plugins/selection.py”, line 75, in pick_plugin
verified = filtered.verify(ifaces)
File “/usr/lib/python2.7/dist-packages/certbot/plugins/disco.py”, line 215, in verify
return self.filter(lambda p_ep: p_ep.verify(ifaces))
File “/usr/lib/python2.7/dist-packages/certbot/plugins/disco.py”, line 202, in filter
in self._plugins.iteritems() if pred(plugin_ep)))
File “/usr/lib/python2.7/dist-packages/certbot/plugins/disco.py”, line 202, in
in self._plugins.iteritems() if pred(plugin_ep)))
File “/usr/lib/python2.7/dist-packages/certbot/plugins/disco.py”, line 215, in
return self.filter(lambda p_ep: p_ep.verify(ifaces))
File “/usr/lib/python2.7/dist-packages/certbot/plugins/disco.py”, line 84, in verify
zope.interface.verify.verifyObject(iface, self.init())
File “/usr/lib/python2.7/dist-packages/zope/interface/verify.py”, line 105, in verifyObject
return _verify(iface, candidate, tentative, vtype=‘o’)
File “/usr/lib/python2.7/dist-packages/zope/interface/verify.py”, line 50, in _verify
raise DoesNotImplement(iface)
DoesNotImplement: An object does not implement interface

2016-11-10 00:43:24,143:DEBUG:certbot.main:Exiting abnormally:
Traceback (most recent call last):
File “/usr/bin/certbot”, line 9, in
load_entry_point(‘certbot==0.8.1’, ‘console_scripts’, ‘certbot’)()
File “/usr/lib/python2.7/dist-packages/certbot/main.py”, line 744, in main
return config.func(config, plugins)
File “/usr/lib/python2.7/dist-packages/certbot/main.py”, line 584, in renew
File “/usr/lib/python2.7/dist-packages/certbot/renewal.py”, line 363, in renew_all_lineages
len(renew_failures), len(parse_failures)))
Error: 1 renew failure(s), 0 parse failure(s)

Hi @alimdi,

An explanation suggested by @pde is this issue


If this is right, /etc/letsencrypt/renewal/ddx4.moua7.com.conf would contain one or two lines that say none instead of None, and it could probably be fixed by editing the file and changing none to None. Could you check if this might be the case?

Hi @schoen ,

As you can see above, the only key containing “None” is “authenticator”. It was already starting with a capital letter.
Guess it might be something else.

Thank you for your help.

# renew_before_expiry = 30 days
cert = /etc/letsencrypt/live/ddx4.moua7.com/cert.pem
privkey = /etc/letsencrypt/live/ddx4.moua7.com/privkey.pem
chain = /etc/letsencrypt/live/ddx4.moua7.com/chain.pem
fullchain = /etc/letsencrypt/live/ddx4.moua7.com/fullchain.pem
version = 0.8.1

# Options and defaults used in the renewal process
installer = standalone
authenticator = None
account = 3c8d95de62fb3ed341c5cc492d21e731

Hi @alimdi, I think the problem may be

installer = standalone
authenticator = None

Do you understand the differences among the different Certbot plugins (like standalone, webroot, and apache)? Do you remember what command you originally used to obtain this certificate?

The trouble is that there needs to be an authenticator (a way to make changes to your site to prove that you control it, so that the CA can confirm that) in order to obtain or renew a certificate. With authenticator = None, Certbot has no way to take any actions to prove that you’re in control of the site or domain. Also, standalone isn’t capable of functioning as an installer.

If you meant to use standalone (which probably requires shutting down your web server momentarily during the renewal process), you should be able to switch to something like

installer = None```

If you meant to use a different plugin (like `webroot` or `apache`), I think you will need to get rid of this certificate and generate a new one because there are other details that would be necessary that are missing here (or you could try to copy these details into this file from another certificate that you or someone else has generated in the way that you want).

Hi, @schoen,

Sometimes the mistake is so obvious that you miss it !
Thank you for the external look.

Have a good day.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.