Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Как заставить Firefox и Chromium использовать системные CA?  (Прочитано 4345 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн petro25

  • Автор темы
  • Участник
  • *
  • Сообщений: 182
    • Просмотр профиля
Краткое описание: Есть много Linux ПК которые через proxy ходят в нет. Proxy все пакеты проверяет все аж до 7 лелева OSI вместе с https, также прокси имеет свой сертификат торым заново подписывает пакеты после проверки, перед отдачей клиенту. Клиенты юзают Firefox и Chromium - если идеш на простой http сайт - у тебя 1 раз спросит подтверждение сертификата и дальше все ок(если добавить в его в доверенные), но если идеш на https сайт - каждый сайт спросит подтверждение сертификата. Для того чтобы такого не было - сертификат CA(тот же которым прокси подписывает пакеты) был установлен на все ПК. Но он автоматически не используется ни в FF ни в Chromium. Я ставил вручную сертификат каждому пользователю. Нужно сделать так чтобы юзался системный CA автоматически. Так как очень много ПК(более 500) и большая текучка людей, просто невозможно каждому пользователю постоянно добавлять CA сертификат.


Дано:
ОС Lubuntu 14.04, Firefox + Chrome
В ОС в системном хранилище сертификатов есть CA сертификат.

Нужно: чтобы Firefox и Chromium использовали системное хранилище CA. Также чтобы при добавлении нового пользователя в систему у него не нужно было б настроивать вручную чтонибуть.

Относительно Chromium я более менее добился приемлемого для меня результата.
Я закинул(сгенерированую ранее БД сертификатов) в /etc/skell/.pki/nssdb cert9.db key4.db и pkcs11.txt
В результате я при добавлении нового пользователя получаю в домашней директории базу с сертификатами которую юзает Chromium. Все вроди как устраивает. Интересуют другие способы решения даной проблемы.


Относительно Firefox - полный 0.
Firefox использует свою бд с сертификатами в ~/.mozilla/firefox/xxxx.default/cert8.db key3.db Если ему подсунуть вместо cert8 и key3 - cert9 и key4 он их не ипользует, а создает новый cert8.db и key3.db. Как его заставить юзать cert9.db, key4.db вмместо cert8.db и key3.db, или же как заставить ипользовать системые CA?
Как сделать так чтобы при добавлении нового пользователя он сразу использовал нужные CA?

Идеально было б если бы и FF и Cromium юзали системные настройки, как вариант можно чтобы они ОБА юзали сертификаты из ~/.pki/nssdb/


PS: пробовал для FF создавать директорию /etc/firefox/defaults/profile и туда закидывать профиль с файлами cert8.db и key3.db но при открытии Firefox профиль оттуда не подтягивается, а создается новый.



Пользователь решил продолжить мысль [time]11 Февраль 2015, 11:57:09[/time]:
Никаких идей нет? :'(

Пользователь решил продолжить мысль [time]11 Февраль 2015, 14:43:28[/time]:
Решило мою проблему https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/1185720

В новых Firefox поменялись пути
Цитировать
/usr/lib/firefox/defaults/profile doesn't work anymore starting with firefox 21, and should be replaced with /usr/lib/firefox/browser/defaults/profile
.

Теперь я могу закинуть эталонный cert8.db в /usr/lib/firefox/browser/defaults/profile и при создании нового пользователя он скопирует себе эталонную базу сертификатов в свой профиль.
« Последнее редактирование: 11 Февраля 2015, 13:44:31 от petro25 »

Оффлайн petro25

  • Автор темы
  • Участник
  • *
  • Сообщений: 182
    • Просмотр профиля
А вообще реально заставить Firefox юзать системные сертификаты? Я так понял такая проблема не только на Linux но и на Windows.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Цитировать
но и на Windows.
конечно.
Wars ~.o

Оффлайн Vitto74

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Возникла примерно таже проблема но на Windows и Linux сразу.
Решение я нашел только для Firefox.
Создаем файл /usr/lib/firefox/defaults/pref/addCA.js или c:\program files\Mozilla Firefox\defaults\pref\addCA.js и пишем в него следующее
/DON'T DELETE THIS LINE!

var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
try {
    var hasrun = getPref("rk.autoconfig");

    if (hasrun != 1) {

   const Cc = Components.classes;
   const Ci = Components.interfaces;
   const gIOService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
   const certDB = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB2);
   const scriptableStream=Cc["@mozilla.org/scriptableinputstream;1"].getService(Ci.nsIScriptableInputStream);

        // [...]
   pref("rk.autoconfig", 1);

   function addCertDir() {
       var certs = readCertDir("DefRt", [ 'cert' ]);
       for (var i in certs) {
      cert = certs[i];
      addCert(cert);
       }
   }

   function readCertDir(loc, path) {
       var f = Cc["@mozilla.org/file/directory_service;1"].
      getService(Ci.nsIProperties).get(loc, Ci.nsIFile);
       for( var i in path ) {
      f.append(path[0]);
       }
       var entries = f.directoryEntries;
       var array = [];
       while(entries.hasMoreElements()) {
      var entry = entries.getNext().QueryInterface(Ci.nsIFile);
      if (entry.exists() && entry.isFile() &&
          entry.leafName.match(".+\.(pem|crt)$")) {
          array.push(entry);
          // prompts.alert(null, "Leo", "Path: "+entry.path);
      }
       }
       return array;
   }

   function addCert(f) {
       var certDB = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB2);
       var channel = gIOService.newChannelFromURI(gIOService.newFileURI(f));
       var input=channel.open();
       scriptableStream.init(input);
       var cert=scriptableStream.read(input.available());
       scriptableStream.close();
       input.close();
       var beginCert = "-----BEGIN CERTIFICATE-----";
       var endCert = "-----END CERTIFICATE-----";
       var begin = cert.indexOf(beginCert);
       var end = cert.indexOf(endCert);
       cert = cert.substring(begin + beginCert.length, end);
       cert = cert.replace(/[\r\n]/g, "");
       try {
      certDB.addCertFromBase64(cert, 'C,C,C', "");
       } catch (ex) {
      prompts.alert(null, "Certificate import error", "Error: " + ex);
       }
   }

   // Alternative: distribution.ini
   // https://wiki.mozilla.org/Distribution_INI_File
   // http://mxr.mozilla.org/mozilla-central/source/browser/components/distribution.js?force=1
   function importBookmarks() {
       // Get bookmarks.html file location
       //var bmSvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
       //    getService(Ci.nsINavBookmarksService);
       // bmSvc.removeFolderChildren(bmSvc.placesRoot);

       // Import PlacesUtils
       Components.utils.import("resource://gre/modules/PlacesUtils.jsm");

       var f = Cc["@mozilla.org/file/directory_service;1"].
      getService(Ci.nsIProperties).get("DefRt", Ci.nsIFile);
       // Restore bookmarks from the JSON file
       // NOTE: This *overwrites* all pre-existing bookmarks
       f.append("bookmarks.json");
       if (f.exists()) {
      // import the file
      try {
          PlacesUtils.restoreBookmarksFromJSONFile(f);
      } catch (e) {
          // Report the error, but ignore it.
          prompts.alert(null, "Bookmark import error", "Error: " + e);
      }
       }
   }

   addCertDir();
   importBookmarks();
    }

}
catch(e) {
    displayError("autoconfig error", e);
}

После чего сертификаты из папки /usr/lib/firefox/defaults/cert или c:\program files\Mozilla Firefox\defaults\cert будут добавляться при старте всем пользователям.

UPD1 Про Windows погорячился - скрипт не отрабатывает. Пока разбираюсь почему.
UPD2 Добился работы и в windows. Скрип изначально писался для автоконфига, но начиная с Firefox 33 изменилось некоторое API (странно, что в ubuntu работает) и скрипты из c:\program files\Mozilla Firefox\defaults\pref не имеют достаточно полномочий. Кроме того изменилось имя объекта nsIX509CertDB2 и теперь он называется nsIX509CertDB. В общем файл нужно положить рядом с исполняемым файлом в c:\program files\Mozilla Firefox\mozilla.cfgи заменить в нем nsIX509CertDB2 на nsIX509CertDB, сертификаты в C:\Program Files\Mozilla Firefox\browser\defaults\cert. Кроме того нужно прописать автоконфиг в файле C:\Program Files\Mozilla Firefox\defaults\pref\autoconfig.js

/DON'T DELETE THIS LINE!

pref('general.config.obscure_value', 0);
pref('general.config.filename', 'mozilla.cfg');
« Последнее редактирование: 26 Августа 2015, 07:48:16 от Vitto74 »
Хочешь изменить мир? Начни с себя.

 

Страница сгенерирована за 0.077 секунд. Запросов: 25.