Newsgroup: it.comp.lang.perl
Titolo: CRL & LDAP

Le cose semplici sono sempre le migliori...
#!/bin/bash
wget 
http://crl.cacert.org/revoke.crl
openssl crl -in revoke.crl -inform DER -text -noout >Revoke.crl
Quindi volendo inserire i dati in un DB tipo MySQL...
Versione Made in Italy...
#!/usr/bin/perl
$file = "CRL.crl";
if(-e $file){
         print "Decode $file \n";
}else{
         print "Download $file \n";
system('ldapsearch -x -h 
ldap.infocert.it
 -b "cn=InfoCert Firma 
Qualificata CRL01,ou=Certificatore Accreditato,o=INFOCERT SPA,c=IT" 
"(objectclass=cRLDistributionPoint)" certificateRevocationList >CRL.crl');
}
use Crypt::X509::CRL;
use Data::Dumper;
$crl = loadcrl('$file');
$decoded = Crypt::X509::CRL->new( crl => $crl );
print Dumper $decoded;
sub loadcrl {
         my $file = shift;
         open FILE, $file || die "cannot load test certificate" . $file 
. "\n";
         binmode FILE;    # HELLO Windows, dont fuss with this
         my $holdTerminator = $/;
         undef $/;        # using slurp mode to read the DER-encoded 
binary certificate
         my $crl = <FILE>;
         $/ = $holdTerminator;
         close FILE;
         return $crl;
}
e ancora non se ne viene a capo...
Qualche idea sul come rendere potabile il suddetto file CRL.crl?

 $crl = loadcrl('$file');
  $crl = loadcrl($file);
In ogni caso, Crypt::X509::CRL si aspetta dei dati in formato DER, quindi
devi "de-base64-izzare" l'attributo Ldap, se vuoi usare la CRL restituita
da ldapsearch.
Max

Max M. ha scritto:

ho provato:
openssl base64 -d -in  CRL.crl -out CRLB64.crl
e
perl -MMIME::Base64 -ne 'print decode_base64($_)' < CRL.crl > CRLB64.crl
senza alcun risultato.
il revoke.crl al cat ha + o meno questo aspetto:
080506230757Z0?
080503062328Z0?
080512094156Z0?
080512094214Z0?
080503114611Z0?
080503105549Z0?
080511115835Z0?
080503123128Z0?
080503122427Z0?
080504122652Z0?
080503131240Z0?
080503141019Z0?
080503135001Z0?
080503135145Z0?
080505161027Z0?
080507100301Z0?
il CRLB64.crl questo:
#########################
    ????GEA@????@E?L
MMNV?   ???GFF̌
LL?
    ????GEAA
            ???Q?L
LM
NV?     ???GFF̌
LM
   ????GEAA
           ???E?L
LM
?͍L֌    ???GFF̌
LM
########################
A occhio direi che il formato di partenza non è lo stesso ma a dire il 
vero comincio a fare un p'ò di confusione...

 
Devi decodificare solo l'attributo "certificateRevocationList" (non tutta
l'entry ldif che hai ricevuto).
Max

Max M. ha scritto:

Premesso che ho qualche difficoltà a seguirti..
Dopo alcune prove empriche..
Se scarico il suddetto file manualmente con ldapbrowser (applicazione 
scritta in java disponibile anche come applet sul sito:
http://www-unix.mcs.anl.gov/~gawor/ldap/applet/applet.html
il file downlodato è correttamente formattato in formato DER
infatti:
openssl crl -in crlapplet.crl -inform DER -text -noout
Certificate Revocation List (CRL):
         Version 2 (0x1)
         Signature Algorithm: sha1WithRSAEncryption
         Issuer: /C=IT/O=INFOCERT 
SPA/serialNumber=07945211006/OU=Certificatore Accreditato/CN=InfoCert 
Firma Qualificata
         Last Update: May 15 11:55:34 2008 GMT
         Next Update: May 15 13:05:34 2008 GMT
         CRL extensions:
             X509v3 Authority Key Identifier:
 
keyid:30:FC:21:7C:7C:D2:7C:6D:BC:8C:C3:BA:13:50:F7:7A:A0:2B:C5:B6
             X509v3 CRL Number:
                 7135
 
2.5.29.28
: critical
 
0...........ldap://
ldap.infocert.it/cn%3dInfoCert%20Firma%20Qualificata%20CRL01,ou%3dCertificatore%20Accreditato,o%3dINFOCERT%20SPA,c%3dIT?certificateRevocationList.
..
Revoked Certificates:
     Serial Number: 04FE
         Revocation Date: Sep 18 15:37:43 2007 GMT
         CRL entry extensions:
             Invalidity Date:
                 Sep 18 00:00:00 2007 GMT
             X509v3 CRL Reason Code:
                 Cessation Of Operation
Quindi immagino che il problema sia solo in fase di download della CRL e
teoricamente dovrebbe essere risolvibile via curl/ldapsearch o no?

 Premesso che ho qualche difficoltà a seguirti..
Non capisco che difficoltà hai.
Io ho scaricato il CRL via ldapsearch, usando esattamente il comando che hai
specificato nel tuo primo messaggio. Nei dati che vengono restituiti (in
formato LDIF) c'è un entry che si chiama "certificateRevocationList", il
cui valore è una sequenza codificata in base64. L'ho estratta dal resto,
l'ho decodificata e ho passato dati (DER) al tuo script, che li ha
interpretati senza problema.
Max

 interpretati senza problema.
A me non funzia, evidentemente sbaglio qualcosa

  certificateRevocationList;binary::MIMBTPIwgwFL2QIBATANBgkqhkiG9 ...
No. "certificateRevocationList" è il nome dell'attributo, "binary" è il
subtype, "::" è un separatore. Il valore è la sequenza che segue, da "MIMB"
in poi.
Max