Thêm chứng chỉ quyền trên toàn hệ thống trên Firefox


27

Tôi muốn thêm một số CA gốc không đi kèm với firefox mặc định trên Ubuntu, nhưng tôi không biết làm thế nào.

Tôi đã thử thêm chúng vào chứng chỉ địa phương certutil, nhưng nó không hoạt động. Nó làm rối cơ sở dữ liệu chứng chỉ của tôi.

$ certutil -A -d .mozilla/firefox/kek3dogy.default/ -i /usr/local/share/ca-certificates/FNMT_ACRAIZ.crt -n "Certificado Raiz FNMT" -t "TCu,Cuw,Tuw"

và sau đó

$ certutil -L -d .mozilla/firefox/kek3dogy.default/

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

Go Daddy Secure Certification Authority                      ,,   
VeriSign Class 3 Secure Server CA - G3                       ,,   
VeriSign Class 3 Extended Validation SSL CA                  ,,   
DigiCert High Assurance CA-3                                 ,,   
GlobalSign Domain Validation CA - G2                         ,,   
GeoTrust SSL CA                                              ,,   
StartCom Class 2 Primary Intermediate Server CA              ,,   
Google Internet Authority                                    ,,   
Certificado Raiz FNMT                                        CT,C,c
USERTrust Legacy Secure Server CA                            ,,   
HP Jetdirect 2B0EAD20                                        ,,   
Akamai Subordinate CA 3                                      ,,   
VeriSign, Inc.                                               ,,   
Thawte SGC CA                                                ,,   
VeriSign Class 3 Secure Server CA - G2                       ,,

Chứng chỉ sẽ không xuất hiện trên Firefox. Tôi đã thử điều này nhiều lần, thậm chí xóa hồ sơ và nó xuất hiện một lần trên giao diện Firefox, nhưng hoàn toàn trống rỗng.

Dù sao, điều đó chỉ dành cho người dùng và tôi muốn thêm chúng trên toàn hệ thống. Có một cơ sở dữ liệu toàn hệ thống tôi có thể sửa đổi? Làm sao?

Nếu tôi không thể sửa đổi cơ sở dữ liệu trên toàn hệ thống, tôi có thể dựa vào tập lệnh bắt đầu X (như /etc/X11/Xsession.d/tập lệnh hoặc tập lệnh được gọi bởi hệ thống tự khởi động xdg /etc/xdg/autostart/) để sửa đổi hồ sơ người dùng khi bắt đầu phiên, nhưng tôi cần một giải pháp công trinh. Tôi thậm chí không thể tải chứng chỉ trên hồ sơ người dùng từ dòng lệnh ngay bây giờ!


Có phải chỉnh sửa cấu hình mặc định là một tùy chọn (để các chứng chỉ mới được thêm vào được thêm khi cấu hình mới được tạo, nhưng cấu hình cũ không thay đổi)?
Andrea Corbellini

Không, khoảng +100 hồ sơ đã tồn tại và hồ sơ mới là một điều hiếm.
Jorge Suárez de Lis

Bạn không thể tạo một thư mục hồ sơ mới trong thư mục của Firefox, sau đó thêm nó vào profiles.ini? Sau đó, bạn có thể thêm các thay đổi của mình vào đó, sau đó sao chép nó và profiles.inivào từng thư mục người dùng.
Wilf

NB Bạn có thể chỉnh sửa cấu hình cho Firefox bằng cách chạy firefox -p- nhưng trước tiên bạn phải đóng Firefox.
Wilf

Không, có hơn 100 người dùng với hồ sơ đã có sẵn của riêng họ. Họ sẽ không muốn mất dấu trang, lịch sử, mật khẩu, v.v.
Jorge Suárez de Lis

Câu trả lời:


20

Vấn đề ở đây là Firefox không có vị trí 'trung tâm' nơi nó tìm kiếm chứng chỉ. Nó chỉ nhìn vào hồ sơ hiện tại. Đó là lý do tại sao sửa đổi /usr/share/ca-certificateshoặc các thư mục tương tự khác sẽ không hoạt động với Firefox. Đây là một cái gì đó đã được yêu cầu trong nhiều năm; xem các vấn đề 620373 , 449498454036 (và có thể có nhiều vấn đề khác).

Vì vậy, bạn chỉ còn lại hai loại giải pháp: sửa đổi từng cấu hình hoặc sửa đổi hành vi của Firefox. Tôi biết đây không phải là thứ bạn đang tìm kiếm, nhưng không có cách nào vì Firefox chỉ nhìn vào hồ sơ của người dùng.

Phải nói rằng, giải pháp tôi sẽ chọn là sử dụng các liên kết cứng hoặc tượng trưng, ​​cụ thể là tôi đi với các liên kết cứng. Giải pháp này chắc chắn là dễ nhất và có lẽ là tốt hơn, mặc dù tôi không có đủ thông tin để đánh giá.

Những gì bạn phải làm là về cơ bản loại bỏ từng cert8.dbkey3.dbtệp cho mỗi hồ sơ và thay thế chúng bằng các liên kết đến "đầy đủ nhất" cert8.dbkey3.db. Nếu bạn đi với các liên kết cứng, bản gốc cert8.dbkey3.dbsẽ không thể phân biệt với các liên kết mới.

Hãy nhớ điều chỉnh quyền để phù hợp với nhu cầu của bạn. Nhiều khả năng, bạn sẽ cần để chmod a+rwmọi người có thể thêm / xóa chứng chỉ. Nếu bạn chỉ muốn một số người dùng nhất định có thể thêm / xóa chứng chỉ, bạn có thể tạo một nhóm, gán hai cơ sở dữ liệu cho nhóm đó và chỉ cấp +wquyền cho nhóm.


Yup, giống như tôi có thể nghĩ ra. Đó là một chút xấu hổ cho Firefox, imo.
gertvdijk

Nhưng sẽ không ghi đè lên rằng chứng chỉ người dùng? Không có chứng chỉ người dùng được lưu trữ ở đó?
Jorge Suárez de Lis

@ JorgeSuárezdeLis: tốt, khi bạn xóa các tập tin đó, bạn sẽ mất chứng chỉ. Nếu đây là ý của bạn với "ghi đè", thì có. Trước tiên bạn nên hợp nhất tất cả các cơ sở dữ liệu thành một và sau đó tiến hành tạo các liên kết cứng.
Andrea Corbellini

Nhưng ... tôi không muốn một người dùng có chứng chỉ cá nhân của những người khác! Bây giờ tôi đang nói về chứng chỉ của họ, không phải cơ quan cấp chứng chỉ.
Jorge Suárez de Lis

@ JorgeSuárezdeLis: xin lỗi, tôi không thể hiểu: chứng chỉ cá nhân là gì?
Andrea Corbellini

15

Cách dễ nhất là nhập chứng chỉ vào hồ sơ firefox mẫu và sau đó sao chép cert8.db cho người dùng bạn muốn trang bị chứng chỉ.

Đầu tiên nhập chứng chỉ bằng tay vào hồ sơ firefox của người dùng mẫu. Sau đó sao chép

/home/${USER}/.mozilla/firefox/${randomalphanum}.default/cert8.db

vào hồ sơ người dùng firefox. Đó là nó. Nếu bạn muốn đảm bảo, người dùng mới sẽ nhận được chứng chỉ tự động, sao chép cert8.dbvào:

/etc/firefox-3.0/profile

Đây là một cách khác không ghi đè các chứng chỉ hiện có: [bash phân đoạn cho các hệ thống linux]

certificateFile="MyCa.cert.pem"
certificateName="MyCA Name" 
for certDB in $(find  ~/.mozilla* ~/.thunderbird -name "cert8.db")
do
  certDir=$(dirname ${certDB});
  #log "mozilla certificate" "install '${certificateName}' in ${certDir}"
 certutil -A -n "${certificateName}" -t "TCu,Cuw,Tuw" -i ${certificateFile} -d ${certDir}
done

Bạn có thể tìm thấy certutil trong gói libnss3-tools (debian / ubfox).

Xem thêm: Nhập chứng chỉ CA theo chương trình

Nguồn: Cài đặt chứng chỉ theo chương trình vào Mozilla


+1 nhưng nếu bạn nêu lên điều này, có lẽ bạn cũng nên nêu lên các câu trả lời trên StackOverflow mà điều này được bắt nguồn từ đó.
tripleee

4

Trái với niềm tin phổ biến, bạn có thể khiến Firefox xem xét các chứng chỉ hệ thống thay vì bộ mã hóa cứng của chính nó.

Để làm điều này, bạn sẽ muốn sử dụng một gói được gọi là p11-kit . p11-kit cung cấp thay thế thả vào cho libnssckbi.sothư viện dùng chung có chứa bộ chứng chỉ được mã hóa cứng. Phiên bản p11-kit thay vì đọc các chứng chỉ từ cửa hàng chứng chỉ hệ thống.

Vì Firefox vận chuyển với phiên bản riêng của nó libnssckbi.so, bạn sẽ cần theo dõi và thay thế nó thay vì phiên bản được cung cấp trong libnss3:

sudo mv /usr/lib/firefox/libnssckbi.so /usr/lib/firefox/libnssckbi.so.bak
sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/firefox/libnssckbi.so

Tiếp theo, xóa ~/.pkithư mục để yêu cầu Firefox làm mới cơ sở dữ liệu chứng chỉ của nó (khiến nó bị kéo vào hệ thống) khi khởi động lại Firefox. Lưu ý: điều này sẽ xóa mọi chứng chỉ hiện có trong cửa hàng, vì vậy nếu có các chứng chỉ tùy chỉnh mà bạn đã thêm thủ công, bạn có thể muốn sao lưu thư mục đó và sau đó nhập lại chúng.


Ồ, wow, đó là một chút hack, nhưng +1. Bạn có thể muốn thêm một dpkg-divertbước để tránh APT ghi đè lại tệp khi bạn nâng cấp gói Firefox.
gertvdijk

@ bánh xe. Bạn có biết nếu điều này vẫn còn hoạt động? Tôi đã thử nó với Ubuntu 18.04 và sau khi tôi thực hiện thì Firefox này sẽ không tải bất kỳ certs nào cả. Có p11-kit 0.23.9-2
Kevin Vasko

1

Một trong những tính năng của tiện ích CCK Wizard Firefox là nhập CA certs. Tôi sử dụng tiện ích bổ sung này để tạo một tiện ích bổ sung tùy chỉnh bao gồm Chứng chỉ CA của công ty. Sau đó tôi đóng gói xpi tùy chỉnh trong một .deb trên kho lưu trữ nội bộ mà tất cả các máy trạm đều nhận được cập nhật từ đó.

Thuật sĩ CCK

EDIT: Để đóng gói xpi cho Ubuntu, bạn cần tạo một gói bao gồm thư mục / usr / lib / firefox-addons / extend / [addon-name @ servername] và giải nén toàn bộ nội dung của xpi vào thư mục này . Chẳng hạn, nếu bạn đặt tên cho addon của mình là foobarbaz và máy chủ mà bạn đã cài đặt để cập nhật từ (nếu bạn bật chức năng đó) là intranet.example.com, thì thư mục sẽ là foobarbaz@intranet.example.com. Tôi không bao giờ kích hoạt bản cập nhật tự động, mà thay vào đó là cập nhật bản sửa lỗi trong repo.


Tôi thích phương pháp này hơn các phương pháp khác vì nó độc lập và có thể bao gồm rất nhiều tùy chỉnh khác ở một nơi. Tác giả dường như đã loại bỏ phần mở rộng của mình khỏi AMO. Bây giờ anh ấy có nó trên trang web của riêng mình ở đây , và xpi mới nhất là ở đây .
Amit N Nikol

1

Firefox hoạt động sau khi cài đặt sạch. Nếu cơ sở dữ liệu chứng chỉ cert8.dbbị xóa, nó sẽ được tạo lại trong lần khởi động Firefox tiếp theo. Điều này cho thấy mạnh mẽ rằng có một bộ lưu trữ mặc định CA toàn hệ thống.

Mã nguồn của Firefox cho thấy các cer CA tích hợp trên thực tế được mã hóa cứng thành có thể firefoxthực thi được. Họ cư trú trong bảo mật / nss / lib / ckfw / buildins / certdata.txt

Vì vậy, không có cách nào để cài đặt một chứng chỉ toàn hệ thống. Coi chừng việc vá mã nguồn có thể gây ra vấn đề với quyền sở hữu trí tuệ.


1

Tôi đang sử dụng ứng dụng "Ảo hóa môi trường người dùng" (UEV) thực hiện điều này cho người dùng của tôi, nhưng bạn có thể làm điều này với các tập lệnh đăng nhập trong các máy khách Windows giống nhau. Tôi sẽ không đăng tất cả mã để tự động tìm đường dẫn% APPDATA% \ Mozilla \ Firefox \% PROFILE%, nhưng khi bạn tìm thấy nó, bạn có thể nhập các tập lệnh bằng một số lệnh cơ bản. Về cơ bản tôi đang đọc tệp Firefox.ini.ini để xác định đường dẫn đến hồ sơ Firefox / cert8.db.

Bạn có thể muốn xem xét bằng cách sử dụng ứng dụng certutil.exe. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil

Bạn có thể chạy các kịch bản đăng nhập cho người dùng tự động nhập các certs đáng tin cậy từ một vị trí trung tâm vào Firefox của tất cả người dùng trên hệ thống.

Đây là "cốt lõi" của tập lệnh nhập vb chứng chỉ của tôi:

If Instr(strLine,"Path=Profiles/") Then
  arrLine = Split(strLine, "/")
  strProfile = strAppData & "\Mozilla\Firefox\Profiles\" & arrLine(1)
  strCertDB = strProfile & "\cert8.db"

  'Verify the DB exists, if not move to the next entry
  If objFSO.FileExists(strCertDB) Then
    'Run certutil command on this database
    strCertCommand1 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\MYCA_Root.cer"

    strCertCommand2 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYSECONDCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\SecondCA_Root.cer"

    strCertCommand3 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYTHIRDCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\ThirdCA_Root.cer"

    'Run the import commands for this Firefox profile
    objShell.Run("%comspec% /c " & strCertCommand1),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand2),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand3),0,TRUE

1

Tôi phát hiện ra rằng hầu hết thời gian và theo mặc định nếu không được cấu hình nếu không Firefox sử dụng cơ sở dữ liệu bảo mật cũ (cert8.db, key3.db và secmod.db) có nghĩa là bạn sẽ cần sử dụng một dòng lệnh khác để đưa chứng chỉ vào cơ sở dữ liệu chính xác mà Firefox sử dụng. (xem thêm từ người đàn ông của certutil)

vì vậy nếu hệ thống của bạn sử dụng cơ sở dữ liệu mặc định, lệnh sẽ diễn ra như sau: (dbm)

certutil -A -n "Description Name" -t "CT,C,C" -d dbm:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt

nếu không thì nó phải như thế này: (sql)

certutil -A -n "Description Name" -t "CT,C,C" -d sql:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt

từ người đàn ông certutil:

-d [prefix]directory
Specify the database directory containing the certificate and key
database files.

certutil supports two types of databases: the legacy security databases
(cert8.db, key3.db, and secmod.db) and new SQLite databases (cert9.db,
key4.db, and pkcs11.txt).

NSS recognizes the following prefixes:

·   sql: requests the newer database

·   dbm: requests the legacy database

If no prefix is specified the default type is retrieved from
NSS_DEFAUL

Sử dụng tệp .pem của tôi với certutillệnh đầu tiên đã hoạt động. Tôi đang tìm cách tự động hóa một tập lệnh thiết lập một người dùng và điều này thực hiện thủ thuật. Bạn sẽ cần phải apt-get install libnss3-toolscertutil.
xificurC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.