FireFox et certificats clients sur Android.

Vous voulez aussi utiliser Firefox sur votre mobile sous Android et le synchroniser avec vos différents ordinateurs ? C'est (peut-être) possible ! Posez vos questions ici.

Modérateurs : myahoo, jpj, nico@nc, Mori

FireFox et certificats clients sur Android.

Message par SCN » 16 Sep 2013, 15:29

Bonjour,

dans le cadre d'une application web qui nécessite une authentification par certificat client, je rencontre un problème avec FireFox Mobile (v23).

En effet, j'ai importé le certificat sur le smartphone Android sans aucun problème, et quand je teste la connexion au site avec Chrome, celui-ci me présente un choix de certificats clients que je peux utiliser. Je sélectionne donc le bon certificat et tout fonctionne parfaitement.

En revanche, quand je fais le même test sur Firefox : impossible de me connecter au serveur.
On dirait que Firefox ne trouve pas le certificat. En tout cas, il ne me demande pas lequel utiliser et du coup j’obtiens le message d'erreur suivant : Error code : ssl_error_handshake_failure_alert.

Avez-vous une solution pour importer ce certificat dans Firefox Mobile et l'utiliser ?

Merci d'avance !
Votre Navigateur : Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0
SCN
Arias
 
Message(s) : 1
Inscription : 16 Sep 2013, 15:13

Re: FireFox et certificats clients sur Android.

Message par SLG » 27 Sep 2013, 09:58

Cette fonctionnalité n'existe pas dans Firefox, il faut donc créer une extension (xpi). Celle d' oernii (oernii-cert-manager) ne fonctionnant plus depuis la version 13, je vous propose cet exemple (testée sur FF Android v24):
Code : Tout sélectionner
// MAIN.JS
const {Cc, Ci, Cu} = require("chrome");
var {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm");
var self = require("sdk/self");
var preferences;

function installCert(CertName, CertTrust) {
   var gIOService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
   var certDB = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB2);
   var scriptableStream = Cc["@mozilla.org/scriptableinputstream;1"].getService(Ci.nsIScriptableInputStream);
   var channel = gIOService.newChannel(self.data.url(CertName), null, null);
   var input = channel.open();
   scriptableStream.init(input);
   var certfile = scriptableStream.read(input.available());
   scriptableStream.close();
   input.close();
   var beginCert = "-----BEGIN CERTIFICATE-----";
   var endCert = "-----END CERTIFICATE-----";
   certfile = certfile.replace(/[\r\n]/g, "");
   var begin = certfile.indexOf(beginCert);
   var end = certfile.indexOf(endCert);
   var cert = certfile.substring(begin + beginCert.length, end);
    try {
        certDB.addCertFromBase64(cert, CertTrust, "");
    }catch(ex)
    {
        console.log(ex);
    }
}

function importUSERcert () {
    var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
    var browserWindow = wm.getMostRecentWindow('navigator:browser');
    var certDB = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB);
    var filePicker = Cc[ "@mozilla.org/filepicker;1" ].createInstance(Ci.nsIFilePicker);
    filePicker.init( browserWindow, "Import Certificate", Ci.nsIFilePicker.modeOpen );
    filePicker.appendFilter( "Certificat","*.p12");
    var result = filePicker.open(function(e){
    if (e==Ci.nsIFilePicker.returnOK)
        {
        var theFile = filePicker.file;
        certDB.importPKCS12File(null, theFile);// On n'a pas de retour sur la réussite
        preferences.setBoolPref("installed", true);// Par défaut on dit que l'opération est réussie.
        }
    });
  }
 
exports.main = function() {
    // L'EXTENSION ETANT EXECUTEE A CHAQUE CREATION D'ONGLET, ON STOCKE UNE VALEUR DANS LES PREFERENCES POUR S'ASSURER QUE L'ACTION N'A PAS DEJA ETE EXECUTEE.
    preferences = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.monextension.xpi@jetpack.");
    var installed = false;
    try{
        installed =preferences.getBoolPref("installed");
    }
    catch(ex){
        installed =false;
        preferences.setBoolPref("installed", false);
    }
    //console.log(installed);
    if (!installed)
    {
        installCert("CA.crt", "C,c,c");// LA CHAINE DE CONFIANCE DOIT-ETRE DANS LES RESSOURCES DE L'EXTENSION
        importUSERcert(); // Ici on importe un certificat utilisateur
    }
}

Une fois installé, une fenêtre vous demande de sélectionner le certificat utilisateur. puis une autre pour le mot de passe .

@+
Votre Navigateur : Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0
SLG
Arias
 
Message(s) : 2
Inscription : 27 Sep 2013, 09:35

Re: FireFox et certificats clients sur Android.

Message par SLG » 30 Sep 2013, 08:54

Un bug a été traité sur l'utilisation des certificats clients
https://bugzilla.mozilla.org/show_bug.cgi?id=921477

status-firefox26: --- → affected
status-firefox24: --- → affected
status-firefox27: --- → fixed
status-firefox25: --- → affected

On peut donc utiliser les certificats clients de la version 19 à 23 et à partir de la 27.
Votre Navigateur : Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0
SLG
Arias
 
Message(s) : 2
Inscription : 27 Sep 2013, 09:35


Retour vers Firefox mobile : le navigateur pour téléphones et tablettes sous Android

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)