Architecture card viewer extended/fr
Un article de Milimail.
Sommaire |
Documentation technique - Affichage du certificat pour un contact
Rappel des fonctionnalités
Cette extension permet d'afficher le certificat d'un contact. Ce certificat peut-être celui stocké en local ou bien celui présent dans l'annuaire LDAP. Dans les deux cas, la clé utilisée pour récupérer le certificat d'un contact est son adresse mail. Lorsqu'un certificat est trouvé dans l'annuaire LDAP, il est stocké en local pour pouvoir être utilisé ultérieurement. Par exemple, lors de l'envoi d'un message chiffré.
Implémentation
Normes
Aucune norme ne s'applique à cette extension.
Architecture
Présentation synthétique de l'architecture de l'extension
Cette fonctionnalité est développée sous la forme d'une extension Thunderbird.
Le coeur de cette implémentation consiste à ajouter un bouton permettant l'affichage du certificat depuis la fiche d'un contact.
Les fichiers d'IHM
Au niveau de l'IHM seule la fiche contact est modifiée par overlay pour ajouter un bouton permettant l'affichage du certificat correspondant.
Les fichiers XPCOM
Nous devons distinguer deux types de certificat : le certificat local, stocké au niveau du client, et le certificat distant, stocké au niveau LDAP. En effet, le mode de récupération du certificat est différent pour chacun de ces deux types. Dans tous les cas, la clé utilisée pour récupérer le certificat d'un contact est son adresse mail. La fiche d'un contact local ou distant est affichée en utilisant le même fichier XUL. Celui ci permet de gérer différemment les 2 cas : par exemple champs éditables ou non ... L'attribut LDAP interrogé pour récupérer un certificat est « userCertificate ». Cet attribut est une donnée binaire.
Certificat local
Le service nsIX509CertDB permet de récupérer un certificat local en utilisant une adresse mail comme clé par la méthode :
nsIX509Cert findCertByEmailAddress(nsISupports token , char* emailAddress)
Cet objet certificat doit ensuite être fourni au service nsICertificateDialogs qui se chargera entièrement de son affichage dans une fenêtre dédiée. Le code Javascript à mettre en oeuvre pourra être repris depuis le fichier existant pippki.js :
const nsICertificateDialogs = Components.interfaces.nsICertificateDialogs;
const nsCertificateDialogs = "@mozilla.org/nsCertificateDialogs;1"
function viewCertHelper(parent, cert) {
if (!cert) {
return;
}
var cd = Components.classes[nsCertificateDialogs].getService(nsICertificateDialogs);
cd.viewCert(parent, cert);
}
Il est préférable de dupliquer ce code dans le fichier abCardOverlay_overlay.js dédié afin de s'affranchir des évolutions du fichier pippki.js.
Certificat distant
Pour l'interrogation d'un annuaire LDAP, l'API XPCOM fournit une interface nsILDAPOperation et en particulier la méthode :
void searchExt( AUTF8String baseDn , PRInt32 scope , AUTF8String filter , PRUint32 attrCount , arrayof char* attributes , PRIntervalTime timeOut , PRInt32 sizeLimit )
L'attribut LDAP à interroger pour récupérer le certificat est « userCertificate ». Lors de l'interrogation, il est nécessaire d'utiliser la chaîne suivante « userCertificate;binary » pour spécifier que l'attribut est stocké sous forme binaire.
Un exemple complet de récupération de certificat depuis un annuaire LDAP est disponible dans la librairie certFetchingStatus.js. L'interrogation du LDAP est contenue dans la méthode kickOffSearch() qui est un bon point d'entrée pour comprendre ce code.
Le mécanisme d'interrogation d'un annuaire LDAP est également présent dans l'extension se chargeant de déterminer le format de message supporté par un destinataire.





