Package: ca-certificates Version: 20141019 Tags: patch If "update-ca-certificates" is called with the "--fresh" option, it doesn't correctly re-add certificates in /usr/local/share/ca-certificates. These are ignored. Although /etc/ssl/certs/ca-certificates.crt is re-created correctly, extension scripts in /etc/ca-certificates/update.d are not notified about added certificates.
For example, the file /etc/ssl/certs/java/cacerts, managed by the package ca-certificates-java, won't be re-created correctly if it was removed before. The main cause seems to be that "update-ca-certificates" doesn't remove symlinks pointing to certificates in /usr/local/share/ca-certificates ($LOCALCERTSDIR), but only those pointing to /usr/share/ca-certificates (CERTSDIR). This causes that the add() function doesn't add all certificates to $ADDED. The following example shows the problem: The CA certificate "Test-CA" is stored to /usr/local/share/ca-certificates/test/Test-CA.crt: The first run of "update-ca-certificates --fresh" adds "Test-CA" as expected: # update-ca-certificates -f Clearing symlinks in /etc/ssl/certs...done. Updating certificates in /etc/ssl/certs... 3 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d.... Replacing debian:QuoVadis_Root_CA.pem Replacing debian:QuoVadis_Root_CA_2.pem Adding debian:Test-CA.pem done. done. But a subsequent execution of "update-ca-certificates --fresh" doesn't re-add "Test-CA": # update-ca-certificates -f Clearing symlinks in /etc/ssl/certs...done. Updating certificates in /etc/ssl/certs... 2 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d.... Replacing debian:QuoVadis_Root_CA.pem Replacing debian:QuoVadis_Root_CA_2.pem done. done. The attached patch contains a fix that might solve the problem.
--- update-ca-certificates.old 2015-04-28 14:11:11.327796700 +0200 +++ update-ca-certificates 2015-04-28 14:12:50.895857560 +0200 @@ -89,7 +89,7 @@ find . -type l -print | while read symlink do case $(readlink $symlink) in - $CERTSDIR*) rm -f $symlink;; + $CERTSDIR*|$LOCALCERTSDIR*) rm -f $symlink;; esac done find . -type l -print | while read symlink