From: Vincent Li <vincent.mc.li@gmail.com>
To: Michael Tremer <michael.tremer@ipfire.org>
Cc: Vincent Li <vincent.mc.li@gmail.com>, development@lists.ipfire.org
Subject: Re: [PATCH] initscripts: apache: Regenerate empty ECDSA certificate files on start
Date: Tue, 27 Oct 2026 23:00:32 +0000 (UTC) [thread overview]
Message-ID: <e247a746-805e-d3e1-7148-1b83922579f@gmail.com> (raw)
In-Reply-To: <AC65145B-95B4-4B74-B1C9-0DC6675996C9@ipfire.org>
[-- Attachment #1: Type: text/plain, Size: 3638 bytes --]
Hi Michael,
This has happened to me only once. It occurred after completing the
network setup during an ISO installation: the machine started all
services, but during this period it appeared to hang and stopped
responding. I had to power-reset the machine. After it booted up again,
all services started fine except Apache, which reported a cert/key error.
When I logged in, I found that the cert/key/csr files existed but were
empty.
I don't know the exact reason why the cert/key/csr ended up empty during
the first boot — perhaps the hang interrupted OpenSSL while it was in the
middle of generating the cert/key, or something similar.
On Tue, 27 Oct 2026, Michael Tremer wrote:
> Hello Vincent,
>
> Thank you very much for your email.
>
> I have a question regarding this change which is why it is required at all? There should never be an empty file and if there is one, I am not sure it is a good idea to quietly replace the certificate. So please let me know what caused this problem.
>
> All the best,
> -Michael
>
>> On 27 Oct 2026, at 06:36, Vincent Li <vincent.mc.li@gmail.com> wrote:
>>
>> After completing an ISO installation, Apache was observed once to fail
>> to start, leaving the web UI inaccessible. Although this is a rare
>> occurrence, the cause was that generate_certificates() used "test -f",
>> which only checks that the key/CSR/cert files exist, not that they are
>> non-empty. If openssl fails to write a file during first boot (e.g.
>> low entropy) but leaves an empty file behind, later starts consider the
>> certificate already generated and skip regeneration, leaving Apache
>> with empty server-ecdsa.key/crt and a broken web UI.
>>
>> Use "test -s" instead so empty files are regenerated, and log a boot
>> message via boot_mesg ${FAILURE} if a file is still empty after
>> openssl runs.
>>
>> Signed-off-by: Vincent Li <vincent.mc.li@gmail.com>
>> ---
>> src/initscripts/system/apache | 16 +++++++++++++---
>> 1 file changed, 13 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/initscripts/system/apache b/src/initscripts/system/apache
>> index ba7ede670..7eba99b53 100644
>> --- a/src/initscripts/system/apache
>> +++ b/src/initscripts/system/apache
>> @@ -24,28 +24,38 @@
>>
>> PIDFILE="/var/run/httpd.pid"
>>
>> +# Verify a generated file exists and is non-empty; log a boot message if not.
>> +check_generated() {
>> + if [ ! -s "$1" ]; then
>> + boot_mesg "ERROR: $1 is missing or empty!" ${FAILURE}
>> + fi
>> +}
>> +
>> generate_certificates() {
>> - if [ ! -f "/etc/httpd/server-ecdsa.key" ]; then
>> + if [ ! -s "/etc/httpd/server-ecdsa.key" ]; then
>> boot_mesg "Generating HTTPS ECDSA server key..."
>> openssl ecparam -genkey -name secp384r1 -noout \
>> -out /etc/httpd/server-ecdsa.key &>/dev/null
>> chmod 600 /etc/httpd/server-ecdsa.key
>> evaluate_retval
>> + check_generated /etc/httpd/server-ecdsa.key
>> fi
>>
>> - if [ ! -f "/etc/httpd/server-ecdsa.csr" ]; then
>> + if [ ! -s "/etc/httpd/server-ecdsa.csr" ]; then
>> sed "s/HOSTNAME/`hostname -f`/" < /etc/certparams | \
>> openssl req -new -key /etc/httpd/server-ecdsa.key \
>> -out /etc/httpd/server-ecdsa.csr &>/dev/null
>> + check_generated /etc/httpd/server-ecdsa.csr
>> fi
>>
>> - if [ ! -f "/etc/httpd/server-ecdsa.crt" ]; then
>> + if [ ! -s "/etc/httpd/server-ecdsa.crt" ]; then
>> boot_mesg "Signing ECDSA certificate..."
>> openssl x509 -req -days 999999 -sha256 \
>> -in /etc/httpd/server-ecdsa.csr \
>> -signkey /etc/httpd/server-ecdsa.key \
>> -out /etc/httpd/server-ecdsa.crt &>/dev/null
>> evaluate_retval
>> + check_generated /etc/httpd/server-ecdsa.crt
>> fi
>> }
>>
>> --
>> 2.34.1
>>
>>
>
>
next prev parent reply other threads:[~2026-10-27 23:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-27 6:36 Vincent Li
2026-10-27 10:01 ` Michael Tremer
2026-10-27 23:00 ` Vincent Li [this message]
2026-10-28 10:59 ` Michael Tremer
2026-10-28 23:53 ` Vincent Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e247a746-805e-d3e1-7148-1b83922579f@gmail.com \
--to=vincent.mc.li@gmail.com \
--cc=development@lists.ipfire.org \
--cc=michael.tremer@ipfire.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox