From: Adolf Belka Date: Tue, 1 Apr 2025 18:07:58 +0000 (+0200) Subject: vpnmain.cgi: Fixes bug13737 - revoke any deleted client certificate X-Git-Tag: v2.29-core194~13^2~15 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=41c7cc325e1e2f922de803842d0625e564f6771e;p=ipfire-2.x.git vpnmain.cgi: Fixes bug13737 - revoke any deleted client certificate - As the serial number is incremented now for each new cert that is created, then when a client cert is deleted from the ipsec list in the wui then that cert must be revoked otherwise it will still be listed in the .index file as a valid certificate and then the certificate name and DN could never be used again. - Running the revoke command when deleting a client cert leaves the details in the .index file but the same name can then be re-used and will get a new serial number etc. Fixes: bug13737 Tested-by: Adolf Belka Signed-off-by: Adolf Belka Signed-off-by: Michael Tremer --- diff --git a/html/cgi-bin/vpnmain.cgi b/html/cgi-bin/vpnmain.cgi index 85119a81d..1c9f9243b 100644 --- a/html/cgi-bin/vpnmain.cgi +++ b/html/cgi-bin/vpnmain.cgi @@ -1595,17 +1595,25 @@ END &General::readhash("${General::swroot}/vpn/settings", \%vpnsettings); &General::readhasharray("${General::swroot}/vpn/config", \%confighash); - if ($confighash{$cgiparams{'KEY'}}) { - unlink ("${General::swroot}/certs/$confighash{$cgiparams{'KEY'}}[1]cert.pem"); - unlink ("${General::swroot}/certs/$confighash{$cgiparams{'KEY'}}[1].p12"); - delete $confighash{$cgiparams{'KEY'}}; - &General::writehasharray("${General::swroot}/vpn/config", \%confighash); - &writeipsecfiles(); - &General::system('/usr/local/bin/ipsecctrl', 'D', $cgiparams{'KEY'}) if (&vpnenabled); - } else { - $errormessage = $Lang::tr{'invalid key'}; - } - &General::firewall_reload(); + if ($confighash{$cgiparams{'KEY'}}) { + # Revoke the removed certificate + if (!$errormessage) { + &General::log("charon", "Revoking the removed client cert..."); + my $opt = " ca -revoke ${General::swroot}/certs/$confighash{$cgiparams{'KEY'}}[1]cert.pem"; + $errormessage = &callssl($opt); + unlink ("${General::swroot}/certs/$confighash{$cgiparams{'KEY'}}[1]cert.pem"); + unlink ("${General::swroot}/certs/$confighash{$cgiparams{'KEY'}}[1].p12"); + delete $confighash{$cgiparams{'KEY'}}; + &General::writehasharray("${General::swroot}/vpn/config", \%confighash); + &writeipsecfiles(); + &General::system('/usr/local/bin/ipsecctrl', 'D', $cgiparams{'KEY'}) if (&vpnenabled); + } else { + goto VPNCONF_ERROR; + } + } else { + $errormessage = $Lang::tr{'invalid key'}; + } + &General::firewall_reload(); ### ### Choose between adding a host-net or net-net connection ###