Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus ancienne

# installation de certificat

Envoyé par : gordjious

Date : 06/04/2007 15:50

je doit installer plusieurs dizaines de machines windows XP avec firefox question: peut on ajouter un certificat en local avec un fichier d'installation xpi

# Re: installation de certificat

Envoyé par : snotling

Date : 11/04/2007 14:50

Si je comprends bien, une extension .XPI qui installerait un certificat dans la base des certificats de Firefox ?

L'interface XPCOM nsIX509CertDB devrait répondre à tes besoins : http://www.xulplanet.com/references/xpco(..)

Notamment la méthode importCertsFromFile(). Du genre :

var certdb = Components.classes["@mozilla.org/security/x509certdb;1"]
                       .getService(Components.interfaces.nsIX509CertDB);

// récupérer le fichier de certificat situé dans un dossier chrome:// de ton extension
// -> par exemple: [http://developer.mozilla.org/en/docs/Code_snippets:File_I/O#Getting_your_extension.27s_folder]

certdb.importCertsFromFile(null, file,
                             Components.interfaces.nsIX509Cert.CA_CERT);

// ou autre type que CA_CERT si ce n'est pas un certificat d'une autorité

Ça devrait marcher :-)

N'hésite pas si tu as d'autres questions.

# Re: installation de certificat

Envoyé par : gordjious

Date : 20/04/2007 15:14

j'ai compressé ce script avec les certificats dans un fichier .jar et je les aient placés dans le répertoire d'install /usr/lib/firefox/chrome avec son fichier .manifest. je l'ai testé aussi sur wind C:\program files\firefox\chrome

j'ai aussi essayer en placant le fichier .jar avec les fichiers d'installation rdf et manifest dans un xpi pas de résultat non plus

il est vrai que je suis débutant sur Xul et js

var certdb = Components.classes["@mozilla.org/security/x509certdb;1"]
                    .getService(Components.interfaces.nsIX509CertDB);
// récupérer le fichier de certificat situé dans un dossier chrome:
//  de ton extension
// récupérer le répertoire AChrom = %installation%/chrome
var file =Components.classes["@mozilla.org/file/directory_service;1"]
                    .getService(Components.interfaces.nsIProperties)
                    .get("AChrom", Components.interfaces.nsIFile);	
certdb.importCertsFromFile(null, file,                               
Components.interfaces.nsIX509Cert.CA_CERT);
// ou autre type que CA_CERT si ce n'est pas un certificat d'une autorité

# Re: installation de certificat

Envoyé par : snotling

Date : 23/04/2007 12:32

Salut,

En fait, nsIX509CertDB.importCertsFromFile() n'a pas l'air d'être utilisable en mode "non graphique".

Je te conseille donc d'utiliser :

 const BEGIN_CERT = "-----BEGIN CERTIFICATE-----";
 const END_CERT = "-----END CERTIFICATE-----";

 var certDB = Components.classes["@mozilla.org/security/x509certdb;1"]
                        .getService(Components.interfaces.nsIX509CertDB2);

 var ioService = Components.classes["@mozilla.org/network/io-service;1"]
                           .getService(Components.interfaces.nsIIOService);

 var scriptableStream = Components.classes["@mozilla.org/scriptableinputstream;1"]
                                  .getService(Components.interfaces.nsIScriptableInputStream);

   // http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html
   var trustFlags = "C,C,C";

   var channel = ioService.newChannel("file:///tmp/cert.pem", null, null);
   var input = channel.open();
   scriptableStream.init(input);
   var certfile = scriptableStream.read(input.available());
   scriptableStream.close();
   input.close();
       
   certfile = certfile.replace(/[\r\n]/g, "");
   begin = certfile.indexOf(BEGIN_CERT);
   end = certfile.indexOf(END_CERT);
   cert = certfile.substring(begin + BEGIN_CERT.length, end);

   certDB.addCertFromBase64(cert, trustFlags, "" /* nickname: not taken into account! */);

Avec un certificat PEM codé en Base 64 bien sûr.

Quant à vérifier si un certificat a déjà été importé, là aussi j'ai du code si veux. Un peu "cracra" mais c'est dû à l'API Mozilla :-)

# Re: installation de certificat

Envoyé par : dahar

Date : 21/05/2007 18:09

Bonjour à tous, je cherche moi aussi a déployer le certificat de la boite sur notre intranet.

Comment exécuter ce script à l'installation de l'extension ? le script install.js ayant disparu ..

Cordialement,

DamienHardy

# Re: installation de certificat

Envoyé par : lyesnet

Date : 22/05/2007 18:33

Bonjour a tous, voila moij 'ai envie d'installer des certificats utilisateurs en utilisant les composants xpcom. J'ai déja utiliser la methode importPKCS12File qui marche mais pour plein de raison je ne doit pas l'utilser. J'ai éssaié d'utiliser importCertsFromFile mais ca ne marche pas. Y a t il qlq 1 qui à réussi a installer ses certificats en utilisant d'autres mèthode ?

# Re: installation de certificat

Envoyé par : snotling

Date : 04/06/2007 12:37

Utilise nsIX509CertDB2.addCertFromBase64() et là ça devrait marcher.

# Re: installation de certificat

Envoyé par : sebbat

Date : 03/07/2007 11:06

J'ai beau chercher et faire des essais, je ne parviens pas à installer un certificat au moyen d'une extension.

Quelqu'un a-t-il eu plus de succès ?

# Re: installation de certificat

Envoyé par : chBok

Date : 03/07/2007 14:10

Je n'ai pas testé (n'ayant pas de certificats à installer), mais il me semble que l'extension CCK permet de créer un XPI incluant des certificats.

# Re: installation de certificat

Envoyé par : sebbat

Date : 04/07/2007 11:35

Exact, mais CCK ne fonctionne que sous Firefox, or je cherche à importer un certificat sous Thunderbird ( il est vrai que je ne l'avais pas précisé ).

# Re: installation de certificat

Envoyé par : snotling

Date : 04/07/2007 18:42

L'appel à la méthode dont je t'ai parlée ne fonctionne-t-elle pas ?

# Re: installation de certificat

Envoyé par : chBok

Date : 04/07/2007 20:24

sebbat a écrit:

Exact, mais CCK ne fonctionne que sous Firefox, or
je cherche à importer un certificat sous
Thunderbird ( il est vrai que je ne l'avais pas
précisé ).

Et pourquoi ne pas regarder (hacker ;) ) l'extension pour voir si les interfaces utilisées sont adaptables à Thunderbird ?

# Re: installation de certificat

Envoyé par : mossroy

Date : 25/11/2014 10:18

D'abord merci pour cet extrait de code qui m'a bien rendu service. Par contre, il ne fonctionne plus a partir de Firefox 33, parce que le service Components.interfaces.nsIX509CertDB2 a ete supprime

Voici une version modifiee du script, qui fonctionne sur toutes les versions (a ce jour...), y compris la version 33 :

// Importe un certificat racine dans le magasin de certificats de Firefox
// Le fichier doit etre depose dans le repertoire defaults/pref de Firefox
// Source : http://xulfr.org/forums/read.php?1,8256
function importCert(certFileName) {
const BEGIN_CERT = "-----BEGIN CERTIFICATE-----";
const END_CERT = "-----END CERTIFICATE-----";

var x509certdb = Components.classes["@mozilla.org/security/x509certdb;1"];
var certDB ;
try {
	// Pour Firefox >=33
	certDB = x509certdb.getService(Components.interfaces.nsIX509CertDB);
}
catch (exc) {
	// Pour Firefox <=32
	certDB = x509certdb.getService(Components.interfaces.nsIX509CertDB2);
}

var ioService = Components.classes["@mozilla.org/network/io-service;1"]
						   .getService(Components.interfaces.nsIIOService);

var scriptableStream = Components.classes["@mozilla.org/scriptableinputstream;1"]
								  .getService(Components.interfaces.nsIScriptableInputStream);
								  

// https://developer.mozilla.org/en-US/Add-ons/Code_snippets/File_I_O#Getting_special_files
Components.utils.import("resource://gre/modules/FileUtils.jsm");  
var certFile = FileUtils.getFile("PrfDef", [certFileName]);

// http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html
var trustFlags = "C,C,C";

var channel = ioService.newChannelFromURI(ioService.newFileURI(certFile));
var input = channel.open();
scriptableStream.init(input);
var certfile = scriptableStream.read(input.available());
scriptableStream.close();
input.close();
	   
certfile = certfile.replace(/[\r\n]/g, "");
begin = certfile.indexOf(BEGIN_CERT);
end = certfile.indexOf(END_CERT);
cert = certfile.substring(begin + BEGIN_CERT.length, end);

certDB.addCertFromBase64(cert, trustFlags, "");

}

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.