• Halloween is coming! To celebrate the occasion, we dusted off a couple of old skins, and even created a brand new one (Pixel).
    To get into the festive spirit, install the Skins extension.
  • The new Python extension is now available. It allows customers to deploy and manage WSGI-based Python applications on their websites directly from Plesk.
  • The Plesk Mobile apps for iOS and Android and the Plesk Mobile Center extension have been deprecated, and are no longer available for new installations. In Plesk Obsidian 18.0.84, the Plesk Mobile Center extension will be removed from servers during the upgrade, and the Plesk Mobile apps will lose their server management features.
  • The Social Login extension has been deprecated and will be removed in Plesk Obsidian 18.0.84. After that, it will no longer be possible to log in to Plesk with a Google, Facebook, GitHub account, or with a passkey. Plesk usernames and passwords, as well as logging in with a WebPros Account, are not affected.

Issue Enabling DNSSec for existing keys -- Workaround for double plesk bug.

nelteren

Basic Pleskian
Server operating system version
Debian 13.7
Plesk version and microupdate number
18.0.81.3
There is a known bug in plesk where DNSSec in plesk doesn't function properly due to the fact that it's still not been updated with the changes to bind / using dnssec-policy files.

I've as a workaround created a manual script that writes/copies around a default policy file (filling in the variable details) that's standard for every domain that gives it a 90-day ZSK rollover, 365-day KSK rollover, and sets the 8 various 'delay periods' correctly. Here's the code:

This functions... until you try to re-enable a borked dnssec via plesk itself: It will try to find the first key you used for KSK/ZSK. It only works for DNSSec that's (in my case) less than 3 months old. Older domains are then put in a state where you can't re-enable it. This is a huge problem: DNSSec effectively prevents global DNS from working now for those domains for a long period. It's deliberately built to prevent any attempts at DNS hijacking/takeover, so you can't just put a new thing in.

The error I see is this (the second plesk bug):

Error: Unable to sign the DNS zone. Execution CLI utility is failed: dnsmng. dnsmng: Unable to get files attributes for key '/var/named/run-root/var/keys/(REDACTED)+012+12345 : No such file or directory.
System error 2: No such file or directory dnsmng: Unable to get files attributes for key '/var/named/run-root/var/keys/acme.com/Kacme.com.+012+12345': No such file or directory
System error 2: No such file or directory

Supposing my first key was generated under the file "Kacme.com.+012+12345". That key has been deleted a year ago and no longer exists anywhere. This is fine, there's been a new key in use the last few months "Kacme.com.+016+45678".

In other words, I have all my keys, it's plesk that's the problem that tries to mess with the PK files. I want it to leave all the files in there alone and just set it to enabled in the json/database. [[Skip the check for the ZSK/KSK.]]. How?

I know how I can solve the problem (until anyone edits anything in the DNS, then the problem will re-appear). I take the file 'named.conf' and add these lines to the domain's zone record by manually editing the autogenerated file (i.e. it'll go back to a bad state after the first dns plesk change):

Code:
<<<<< OLD
zone "acme.nl"
    type master;
    file "acme.nl";
    inline-signing yes;
    allow-transfer {
        <slave dns IP>
        <slave dns IP6>
        common-allow-transfer;
    };
};

>>>>> NEW
zone "acme.nl"
    type master;
    file "acme.nl";
    key-directory "keys/acme.nl";
    inline-signing yes;
    dnssec-policy "acme.nl";
    allow-transfer {
        <slave dns IP>
        <slave dns IP6>
        common-allow-transfer;
    };
};

As you can see, all it needs to do to make-stuff-work is to just add those two lines. Bind can, by itself, handle automatically creating/destroying/managing KSK/ZSK files. Plesk shouldn't be messing with that, yet it is.

Can I bypass the buggy implementation and set the config in the plesk database manually maybe?
 
Thank you for the report, @nelteren . I will need you to provide me with some additional details so I can have a full picture and provide accurate details to our engineers to further investigate the behavior. Could you please clarify the following:

1. What are the exact steps that lead to the error when re-enabling DNSSEC? In particular, what do you mean by DNSSEC becoming “borked,” and what actions are performed between the initial configuration and the failed re-enable attempt?
2. Does the affected domain currently fail DNSSEC validation, or does the problem only occur when enabling DNSSEC through Plesk?
3. After manually adding the key-directory and dnssec-policy directives, does DNSSEC work correctly, and does the issue return after making a DNS change through Plesk?

Thanks in advance.
 
We are seeing a very similar issue on another Plesk server.

In our case, the problem can be reproduced when Plesk regenerates the DNS configuration using:

plesk sbin dnsmng --update example.com
After the DNS regeneration, the required dnssec-policy assignment disappears from the generated BIND configuration.

This still occurs with Plesk Obsidian 18.0.81.3, although PPPM-15337 was reported as fixed in 18.0.81.

We are currently using our own guard/repair mechanism to detect and restore the missing DNSSEC configuration after Plesk DNS changes.

I have documented our reproducible case separately here:


The symptoms appear related, but since our issue is reproducible through dnsmng --update rather than only through plesk repair dns, it may be a separate code path or an incomplete fix for PPPM-15337.
 
After upgrading our Plesk server from Debian 12 to Debian 13, DNSSEC signing is no longer working correctly.

Environment:

  • Hostname: mail.ptkardio.pl
  • OS: Debian 13.7
  • BIND: 9.20.30
  • Plesk DNSSEC extension: 1.5.6, release 16040, enabled
  • 12 affected DNSSEC-enabled zones managed by Plesk
Initially, BIND failed to start with:

/etc/named.conf:47: option 'auto-dnssec' no longer exists
loading configuration: failure
As a temporary workaround, we configured a custom dnssec-policy "maintain" for the affected zones, using separate ECDSAP256SHA256 KSK and ZSK keys with unlimited lifetimes. Existing keys were retained, and key purging was disabled.

With this workaround, BIND started successfully. All 12 zones returned signed SOA responses, and each zone published a KSK matching at least one existing public DS record.

However, after running:

plesk repair dns
Plesk regenerated the configuration and removed the per-zone dnssec-policy "maintain" statements. The zones retained key-directory and inline-signing yes. The custom policy definition remains included but is no longer assigned to these zones.

Current state:

  • BIND is running, and named-checkconf succeeds.
  • All 12 affected zones answer DNS queries but return no DNSKEY records and no RRSIG signatures for SOA queries.
  • The Plesk DNSSEC extension still reports the zones as signed. For example:
plesk ext dnssec info --domain-name ptkardio.pl
reports:

Status: Signed
However, these direct queries to the local authoritative server return no DNSKEY records and an unsigned SOA response:

dig @127.0.0.1 ptkardio.pl DNSKEY +dnssec +noall +answer
dig @127.0.0.1 ptkardio.pl SOA +dnssec +noall +answer
Public DS records remain published for the affected domains, so unsigned responses can cause DNSSEC validation failures.

Please investigate the DNSSEC integration between Plesk and BIND 9.20 on Debian 13 and provide a permanent, supported fix that:

  1. Restores signing while preserving the existing keys and DS trust relationships.
  2. Survives plesk repair dns and subsequent DNS changes through the panel.
  3. Keeps key rollover management consistent with the Plesk DNSSEC extension.
  4. Clarifies how the temporary custom policy should be removed or replaced safely.
Please confirm whether this is a known issue and whether a patch or supported workaround is available.

Thank you.
 
Back
Top