Loading…
Tilbage

Profilbillede

Bug i CRLChecker

Kombit Support

Hej

Jeg ved ikke om der er et bedre sted at aflevere denne kommentar. I så fald må nogen gerne pege mig videre.

Vi oplever det problem med CRLChecker'en i vores NemLogin løsning, at hvis den fejler med at validere certifikaterne, så forbliver de markeret som ugyldige, også selvom de senere kan valideres. Dette sker ind imellem når den af en eller anden grund ikke kan få kontakt til serveren. Derefter er der ikke andet at gøre end at genstarte applikationen.

Jeg har fundet fejlen i koden på softwarebørsen, men hvordan får man det rettet?

For dem der måtte være interesserede (og til review i fald jeg skulle tage fejl ;) ) ligger fejlen i CRLChecker (se https://svn.softwareborsen.dk/oiosaml.java/sp/trunk/src/dk/itst/oiosaml/sp/metadata/CRLChecker.java). CRLCheckeren checker de involverede certifikater et ad gangen i følgende løkke (jeg har fjernet logs og lignende for at gøre koden lidt renere):

for (X509Certificate certificate : md.getAllCertificates()) {
try {
if (doOCSPCheck(conf, entityId, md, certificate)) {
continue;
}
if (doCRLCheck(conf, entityId, md, certificate)) {
continue;
}
md.setCertificateValid(certificate, false);
} catch (Exception e) {
}

Når både OCSP check og CRL check fejler gøres certifikatet ugyldigt. Og det bliver det så ved med at være. Hvis man blot tilføjede et 

md.setCertificateValid(certificate, true);

lige inden hver "continue", så ville certifikater kunne blive gjort gyldige igen når de er blevet valideret.

Jeg ved ikke arbejdsgangen er fremover for at få en fejl fikset og sendt nye versioner ud, osv. Jeg håber nogen her kan hjælpe processen på vej.

Mvh.

Anders Ringsmose

Systematic A/S

Hej Anders,

Vi har samme problem med oiosaml.java. Jeg har tidligere skrevet følgende indlæg: http://digitaliser.dk/resource/2582561#comment_2818248, som falder meget godt i tråd med det du beskriver.

Vi vil gerne støtte op om at der (hurtigst muligt!) laves et nyt release der retter fejlen. Fejlen gør i praktis at vores applikation holder op med at fungere 5-6 timer efter en genstart af containeren.

Vh

Morten Binderup-Ernstsen

ITS, Aalborg Universitet

 

Skulle man have tendenser imod civil ulydighed, eller blot være pragmatisk anlagt, så kunne man f.eks. wrappe SPFilter, og sørge for at noget a la følgende bliver kørt umiddelbart efter init():

try {
final Class spFilterClass = Class.forName("dk.itst.oiosaml.sp.service.SPFilter");
final Field crlCheckerField = spFilterClass.getDeclaredField("crlChecker");
crlCheckerField.setAccessible(true);
((CRLChecker) crlCheckerField.get(wrapped)).stopChecker();
}
catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) {
LOG.warn("CRL checker hack failed", e);
}

Så kører applikationen langt mere stabilt (men selvfølgelig uden at overholde kravet om CRL check).

/Jakob

PS: Dette tæller som en +1 på at få offentliggjort et fix ASAP!