Certificate-Authority

Thunderbird.cfg 信任 ca 根證書

  • November 17, 2017

我們剛剛開始使用Thunderbird 自動配置,發現它對於為每個啟動郵件客戶端的使用者自動創建公司標準 imap、smtp 和 ldap 帳戶非常有用。

但是,公司的ldap伺服器(其實就是一個Windows域控制器)使用的是我們公司Certificate Authority頒發的證書,Thunderbird當然不信任這個證書。因此,在手動導入並信任 ca 證書之前,ldap 遠端通訊簿不會同步。

親愛的thunderbird.cfg可以用來導入和信任 ca 根嗎?

我們已經嘗試了以下兩種解決方案,但它們顯然什麼也沒做:也許它們僅適用於 Firefox,或者我們沒有正確配置。

  1. 嘗試信任 Windows 作業系統信任的 ca 根:
pref("security.enterprise_roots.enabled, true");
  1. 嘗試導入並信任 ca 根證書:
var Cc = Components.classes;
var Ci = Components.interfaces;
var certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB);
var certdb2 = certdb;
try {
  certdb2 = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB2);
} catch (e) {}
// This should be the certificate content with no line breaks at all.
cert = "MII ... ==";
certdb.addCertFromBase64(cert, "C,C,C");

更新,和解決方案。

我們無法弄清楚 method 1.,但最終成功了 method2.錯誤是我對這句話的明顯誤解:

第三個參數已從 API 中刪除,不應包含在內

我認為addCertFromBase64只需要兩個參數,而它仍然需要第三個參數,即使它只是一個空白字元串。編輯命令certdb.addCertFromBase64(cert, "C,C,C","");確實有效。

至於 method 2.,缺少一個參數。以下程式碼有效(見最後一行):

var Cc = Components.classes;
var Ci = Components.interfaces;
var certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB);
var certdb2 = certdb;
try {
  certdb2 = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB2);
} catch (e) {}
// This should be the certificate content with no line breaks at all.
cert = "MII ... ==";
certdb.addCertFromBase64(cert, "C,C,C","");

引用自:https://serverfault.com/questions/851577