<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Let's Encrypt certificates are automatic: the built-in ACME v2 client]]></title><description><![CDATA[<p dir="auto">hMailServer has an ACME v2 client built in (RFC 8555). It obtains a free certificate, installs it, assigns it to your TLS ports, renews it before expiry and reloads it. No restart, no scheduled task, no external client.</p>
<p dir="auto">Configure it under <strong>Settings → Security → Certificates (ACME)</strong>, or in <code>hMailServer.INI</code>:</p>
<pre><code>AcmeEnabled=1
AcmeContactEmail=you@yourcompany.com
AcmeDomains=mail.yourcompany.com,mta-sts.yourcompany.com,autoconfig.yourcompany.com
AcmeHttpPort=80
AcmeReuseKey=1
</code></pre>
<p dir="auto"><code>AcmeEnabled</code> ships as <code>0</code>. <code>AcmeDirectoryUrl</code> defaults to <code>https://acme-v02.api.letsencrypt.org/directory</code>.</p>
<p dir="auto"><strong>Two requirements.</strong> Port 80 must be reachable from the internet, because that is how the http-01 challenge proves you control the name. Every name in <code>AcmeDomains</code> must already resolve to this server before you switch it on. If you also host MTA-STS or client autoconfiguration, put <code>mta-sts.&lt;domain&gt;</code>, <code>autoconfig.&lt;domain&gt;</code> and <code>autodiscover.&lt;domain&gt;</code> in <code>AcmeDomains</code> so one certificate covers them.</p>
<p dir="auto"><strong>After issuance.</strong> The server creates or updates a certificate record named <code>ACME (automatic)</code> and assigns it to every TLS-enabled listener that has none of its own, logging each assignment. A listener the assignment could not be saved for is reported as a High 6100 rather than logged as a success, because a port left without a certificate accepts no TLS at all. That is the error to alert on.</p>
<p dir="auto"><strong>Renewal.</strong> The renewal window is two thirds of the certificate lifetime, plus ARI. That is why there is nothing left to schedule. Files live in <code>Data\ACME</code> on Windows and <code>/var/lib/hmailserver/ACME/</code> on Linux: the account key, <code>fullchain.pem</code> and <code>privkey.pem</code>. Back that directory up with the rest of <code>Data\</code>. If a restore misses it the client re-issues, but the new key invalidates any TLSA records you have published.</p>
<p dir="auto">Leave <code>AcmeReuseKey=1</code>. Keeping the same private key across renewals is what keeps published TLSA records valid.</p>
<p dir="auto"><strong>Linux.</strong> Port 80 works without root. <code>CAP_NET_BIND_SERVICE</code> on the unit is what allows the bind. The default certificate directory is <code>&lt;DataFolder&gt;/ACME</code>, which is inside <code>ReadWritePaths</code>. Point <code>AcmeCertificateDirectory</code> elsewhere and you must add that path to <code>ReadWritePaths</code> with a drop-in, or issuance fails on a read-only filesystem.</p>
<p dir="auto"><strong>If it never worked for you.</strong> The built-in client had never once succeeded against real Let's Encrypt until 6.2.24 (#34). Boulder pretty-prints its JSON and the challenge locator searched for the compact spelling. 6.2.25 then fixed issuance and renewal ending the process (#93). If you gave up on this on an older build, it is worth another look.</p>
<p dir="auto"><strong>Another CA.</strong> Leave <code>AcmeEnabled=0</code>, add the PEM certificate and key under Settings → Security → SSL certificates, then assign it to ports under Settings → Network → TCP/IP ports. On Linux, an external client that replaces the PEM files in place needs <code>POST /api/v1/server/reinitialize</code> or a restart before the new files are served.</p>
<p dir="auto">Chapter 9, encryption and certificates: <a href="https://www.progressiverobot.com/hmailserver-documentation/#9-encryption-and-certificates" rel="nofollow ugc">https://www.progressiverobot.com/hmailserver-documentation/#9-encryption-and-certificates</a><br />
Report problems: <a href="https://gitlab.com/Progressiverobot/hmailserver" rel="nofollow ugc">https://gitlab.com/Progressiverobot/hmailserver</a></p>
]]></description><link>https://www.hmailserver.co.uk/topic/28187/let-s-encrypt-certificates-are-automatic-the-built-in-acme-v2-client</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 04:09:23 GMT</lastBuildDate><atom:link href="https://www.hmailserver.co.uk/topic/28187.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Sep 2026 01:40:00 GMT</pubDate><ttl>60</ttl></channel></rss>