Ich stand vor dem Problem, ein Kryptographie-Modul für den Zugriff auf eine Smartcard für ein Client-Zertifikat installieren zu wollen.
In Firefox 3.0 ging das noch mit…
window.pkcs11.addmodule(moduleCommonName,moduleFileName,0,0);
Ab Firefox 3.5 gibt es aber das window.pkcs11-Objekt nicht mehr. Die neue Methode ist im Wiki falsch dokumentiert, laut Spezifikation erwartet addModule nämlich, wie das alte auch, vier Parameter, der Aufruf muß also
PKCS11.addModule(moduleCommonName,moduleFileName,0,0);
lauten. Die beiden letzten Parameter sorgen für eine Priorisierung des Moduls für bestimmte Zugriffe.
Javascript-Sicherheit
Würde man versuchen, die Komponente einfach so zu benutzen, würde das daran scheitern, daß Javascript in einer Seite standardmäßig nicht auf Components.classes zugreifen darf:
<…> wurde die Erlaubnis für das Lesen der Eigenschaft XPCComponents.classes verweigert.
Das Script muß dieses Recht erst explizit anfordern:
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
Es erscheint ein Dialog:
Um diesen unschönen Dialog zu umgehen, kann man Firefox vorab sagen, daß die jeweilige Datei vertrauenswürdig ist. Die nötigen Einstellungen werden in die user.js im Firefox-Profil-Verzeichnis eingetragen:
user_pref("capability.principal.blah.granted", "UniversalXPConnect"); user_pref("capability.principal.blah.id", "file:///C|/pfad/zur/datei.html");
Die Datei liegt hier zum Beispiel auf Laufwerk C:, blah ist ein beliebiger Schlüssel. Die Reihenfolge spielt eine Rolle (erst granted, dann id). Damit Firefox die user.js erneut liest, muß er neu gestartet werden. Caveat: Die Einstellungen unter capability.principal werden in about:config nicht angezeigt, da about:config in Javascript implementiert ist und Javascript nicht auf capability zugreifen darf.
Alternative Möglichkeiten
Sollte die Installation des Kryptographiemoduls als Teil einer Komponente erfolgen, hätte man kein Problem mit dem Dialog. Hierbei ist zu beachten, daß es ab Firefox 3.6 nicht mehr unterstützt wird, Komponenten einfach in den components-Ordner von Firefox zu legen, sie müssen in eine Extension umgewandelt werden. Diese kann dann wiederum per Command Line installiert werden.
Kryptographiemodule können auch direkt angemeldet werden, die Anmeldung ist gespeichert in secmod.db im Profilverzeichnis. Diese Datei kann mit Hilfe des Tools modutil, Teil der NSS Security Tools, bearbeitet werden, von dem es aber keine Binaries gibt.