[horde] Horde refuses to create "secret_key" automatically on fresh install

Ruud Baart r.j.baart at prompt.nl
Wed Jul 8 16:22:51 UTC 2026


Op 6-7-2026 om 15:42 schreef Sebastian Arcus:
> I'm not sure if this is particular to my own setup or a generic issue. 
> I installed Horde6 using the steps below:
>
> $ cd /srv/lighttpd/horde6.mydomain.com/
> $ composer create-project horde/bundle .
> $ composer require horde/timeobjects  horde/content
> $ cp ./vendor/horde/horde/config/conf.php.dist 
> ./var/config/horde/conf.php
>
> When trying to load https://horde6.mydomain.com, I get the error "520 
> Bad Gateway". After enabling test.php, I get the error message below:
>
>
> Error: Cannot create Horde_Secret_Cbc Root cause: 
> Horde_Core_Secret_Cbc: key_format 'hkdf-with-legacy-fallback' requires 
> a non-empty 'secret_key' constructor parameter. HKDF derivation over 
> empty master secret would produce a predictable per-session key. Set a 
> strong $conf['secret_key'] in horde/conf.php, or switch key_format to 
> 'legacy-only' (rollback mode).
>
>
>
> It all works fine if I copy manually the "secret_key" from conf.php 
> entry from a working installation of Horde, or generate one with 
> OpenSSL. Is the key supposed to be generated manually and added to 
> conf.php? Maybe it is in the instructions and I missed it?
>
>
> I am on PHP 8.4.22 and Lighttpd 1.4.82

More or less the same here. After

    composer create-project horde/bundle .

and a few

    composer require ....

I did:

    cp -a vendor/horde/horde/config/conf.php.dist var/config/horde/conf.php
    composer horde-reconfigure

I tried to load the initial page. This was shown:

Horde\Exception\HordeRuntimeException:
Horde_Core_Secret_Cbc:
key_format 'hkdf-with-legacy-fallback' requires a non-empty
'secret_key' constructor parameter.

HKDF derivation over empty master
secret would produce a predictable per-session key.
Set a strong
$conf['secret_key'] in horde/conf.php, or switch key_format to
'legacy-only' (rollback mode).

in
/home/websites/domain.com/vendor/horde/core/lib/Horde/Core/Secret/Cbc.php:206
Stack trace:

#0
/home/websites/domain.com/vendor/horde/core/lib/Horde/Core/Factory/Secret/Cbc.php(21):
Horde_Core_Secret_Cbc->__construct()

#1
/home/websites/domain.com/vendor/horde/injector/src/Binder/Factory.php(125):
Horde_Core_Factory_Secret_Cbc->create()

#2
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(409):
Horde\Injector\Binder\Factory->create()

#3
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(466):
Horde\Injector\Injector->createInstance()

#4
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(456):
Horde\Injector\Injector->get()

#5
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(627):
Horde\Injector\Injector->get()

#6
/home/websites/domain.com/vendor/horde/core/src/Session/HordeSessionFactory.php(79):
Horde\Injector\Injector->getInstance()

#7
/home/websites/domain.com/vendor/horde/injector/src/Binder/Factory.php(125):
Horde\Core\Session\HordeSessionFactory->create()

#8
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(409):
Horde\Injector\Binder\Factory->create()

#9
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(466):
Horde\Injector\Injector->createInstance()

#10
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(627):
Horde\Injector\Injector->get()

#11
/home/websites/domain.com/vendor/horde/core/lib/Horde/Registry.php(2560):
Horde\Injector\Injector->getInstance()

#12
/home/websites/domain.com/vendor/horde/core/lib/Horde/Registry.php(2364):
Horde_Registry->getAuth()

#13
/home/websites/domain.com/vendor/horde/core/lib/Horde/ErrorHandler.php(99):
Horde_Registry->isAdmin()

#14 [internal function]:
Horde_ErrorHandler::fatal()

#15 {main} Next
Horde\Injector\NotFound

Exception: Cannot create Horde_Secret_Cbc Root
cause: Horde_Core_Secret_Cbc: key_format 'hkdf-with-legacy-fallback'
requires a non-empty 'secret_key' constructor parameter. HKDF
derivation over empty master secret would produce a predictable
per-session key. Set a strong $conf['secret_key'] in horde/conf.php,
or switch key_format to 'legacy-only' (rollback mode).

in
/home/websites/domain.com/vendor/horde/injector/src/Injector.php:513
Stack trace:

#0
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(456):
Horde\Injector\Injector->get()

#1
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(627):
Horde\Injector\Injector->get()

#2
/home/websites/domain.com/vendor/horde/core/src/Session/HordeSessionFactory.php(79):
Horde\Injector\Injector->getInstance()

#3
/home/websites/domain.com/vendor/horde/injector/src/Binder/Factory.php(125):
Horde\Core\Session\HordeSessionFactory->create()

#4
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(409):
Horde\Injector\Binder\Factory->create()

#5
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(466):
Horde\Injector\Injector->createInstance()

#6
/home/websites/domain.com/vendor/horde/injector/src/Injector.php(627):
Horde\Injector\Injector->get()

#7
/home/websites/domain.com/vendor/horde/core/lib/Horde/Registry.php(2560):
Horde\Injector\Injector->getInstance()

#8
/home/websites/domain.com/vendor/horde/core/lib/Horde/Registry.php(2364):
Horde_Registry->getAuth()

#9
/home/websites/domain.com/vendor/horde/core/lib/Horde/ErrorHandler.php(99):
Horde_Registry->isAdmin()

#10 [internal function]:
Horde_ErrorHandler::fatal() #11 {main}


More information about the horde mailing list