Firefox에서 시스템 전체의 인증 기관 추가


27

우분투에서 기본 파이어 폭스와 함께 제공되지 않는 루트 CA를 추가하고 싶지만 방법을 모르겠습니다.

로 로컬 인증서에 추가하려고 시도했지만 certutil작동하지 않았습니다. 인증서 데이터베이스를 엉망으로 만들었습니다.

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

그리고

$ 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                       ,,

인증서는 Firefox에 표시되지 않습니다. 프로필을 삭제 하더라도이 작업을 여러 번 시도했지만 Firefox 인터페이스에 한 번 나타나지만 완전히 비었습니다.

어쨌든 그것은 사용자에게만 해당되며 시스템 전체에 추가하고 싶습니다. 수정할 수있는 시스템 전체 데이터베이스가 있습니까? 방법?

수정할 수있는 시스템 전체 데이터베이스가없는 경우 X 시작 스크립트 ( /etc/X11/Xsession.d/하나 또는 xdg 자동 시작 시스템에서 호출 한 스크립트 /etc/xdg/autostart/)를 사용하여 세션 시작시 사용자 프로필을 수정할 수 있지만 해결 방법이 필요합니다. 공장. 명령 행에서 사용자 프로파일에 인증서를로드 할 수도 없습니다!


기본 프로필을 편집하는 옵션이 있습니까? (새 프로필을 만들 때 새로 추가 된 인증서가 추가되지만 기존 프로필은 변경되지 않은 상태로 유지됩니까?)
Andrea Corbellini

아니요, 약 +100 개의 프로필이 이미 존재하며 새로운 프로필은 드문 일입니다.
Jorge Suárez de Lis

Firefox의 디렉토리에 새 프로필 폴더를 생성 한 다음 추가 할 수 profiles.ini없습니까? 그런 다음 변경 사항을 추가 한 후이를 profiles.ini각 사용자 디렉토리에 복사 할 수 있습니다 .
Wilf

NB 다음을 실행하여 Firefox에 대한 프로파일을 편집 할 수 firefox -p있지만 Firefox를 먼저 닫아야합니다.
Wilf

아니요, 기존 프로필을 가진 +100 명의 사용자가 있습니다. 그들은 그들의 북마크 등 역사, 암호, 잃지 않을 것 같은
호르헤 수아레스 드 lis

답변:


20

여기서 문제는 Firefox에 인증서를 찾을 수있는 '중앙'위치가 없다는 것입니다. 단지 현재 프로필을 살펴 봅니다. 그렇기 때문에 /usr/share/ca-certificatesFirefox에서는 수정 또는 다른 유사한 디렉토리가 작동하지 않습니다. 이것은 몇 년 동안 요청 된 것입니다. 이슈 620373 , 449498454036을 참조하십시오 .

따라서 각 프로파일을 수정하거나 Firefox의 동작을 수정하는 두 가지 솔루션 만 남게됩니다. 나는 이것이 당신이 찾고있는 것이 아니라는 것을 알고 있지만 Firefox는 사용자 프로필 만 볼 수 있기 때문에 방법이 없습니다.

내가 선택한 솔루션은 하드 링크 또는 기호 링크를 사용하는 것입니다. 특히 하드 링크를 사용합니다. 판단하기에 충분한 정보가 없지만이 솔루션은 확실히 가장 쉽고 아마도 더 좋습니다.

당신이해야 할 일은 기본적으로 각 프로파일의 파일 cert8.dbkey3.db파일을 제거 하고 "가장 완전한" cert8.db및 로 연결되는 링크로 바꾸는 것입니다 key3.db. 하드 링크를 사용하는 경우 원본 은 새 링크 cert8.dbkey3.db구별 할 수 없습니다.

필요에 맞게 권한을 조정해야합니다. chmod a+rw모두가 인증서를 추가 / 제거 할 수 있도록 해야합니다 . 특정 사용자 만 인증서를 추가 / 제거 할 수있게하려면 그룹을 작성하고 두 개의 데이터베이스를 해당 그룹에 지정하고 그룹에 대한 +w권한 만 부여하십시오.


그래, 내가 생각해 낼 수있는 것과 같습니다. 파이어 폭스에게는 다소 수치 스럽다.
gertvdijk

그러나 사용자 인증서를 덮어 쓰지 않습니까? 사용자 인증서가 저장되어 있지 않습니까?
Jorge Suárez de Lis

@ JorgeSuárezdeLis : 음, 그 파일을 삭제하면 인증서를 잃게됩니다. 이것이 "덮어 쓰기"의 의미라면, 그렇습니다. 먼저 모든 데이터베이스를 하나로 병합 한 다음 하드 링크 작성을 진행해야합니다.
Andrea Corbellini

하지만 ... 한 사용자가 다른 사용자의 개인 인증서를 갖기를 원하지 않습니다! 지금은 인증 기관이 아닌 인증서에 대해 이야기하고 있습니다.
Jorge Suárez de Lis

@ JorgeSuárezdeLis : 죄송합니다, 이해할 수 없습니다 : 개인 인증서 란 무엇 입니까?
Andrea Corbellini

15

가장 쉬운 방법은 인증서를 샘플 firefox-profile로 가져온 다음 cert8.db를 인증서가있는 사용자에게 복사하는 것입니다.

먼저 인증서를 샘플 사용자의 firefox 프로파일로 직접 가져 오십시오. 그런 다음 복사

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

firefox-profiles 사용자에게. 그게 다야. 새 사용자가 인증서를 자동으로 받도록하려면 다음으로 복사 cert8.db하십시오.

/etc/firefox-3.0/profile

기존 인증서를 대체하지 않는 대체 방법은 다음과 같습니다. [linux 시스템의 bash 조각]

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

certutil은 libnss3-tools 패키지 (debian / ubuntu)에서 찾을 수 있습니다.

참조 : CA 인증서의 프로그래밍 수입

출처 : 프로그래밍 방식으로 인증서를 Mozilla에 설치


+1이지만 이것을 올리면 StackOverflow에 대한 답변도 올라 갔을 것입니다.
tripleee

4

일반적인 믿음과는 달리, 당신은 수있는 시스템 인증서 대신에 자신의 하드 코딩 된 세트를보고 파이어 폭스를 얻을.

이렇게하려면 p11-kit 이라는 패키지를 사용하려고합니다 . p11-kit은 libnssckbi.so하드 코드 된 인증서 세트를 포함하는 공유 라이브러리 인 드롭 인 대체를 제공합니다 . p11-kit 버전은 대신 시스템 인증서 저장소에서 인증서를 읽습니다.

Firefox는 자체 버전 libnssckbi.so의을 (를) 제공하므로 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

그런 다음, ~/.pkiFirefox를 다시 시작할 때 Firefox가 인증서 데이터베이스를 새로 고치도록 (시스템 인증서를 가져 오도록 하는) 디렉토리를 삭제하십시오 . 참고 : 이렇게하면 저장소의 기존 인증서가 삭제되므로 수동으로 추가 한 사용자 지정 인증서가있는 경우 해당 폴더를 백업 한 다음 다시 가져 오십시오.


와우, 그것은 약간의 해킹이지만 +1입니다. dpkg-divertFirefox 패키지를 업그레이드 할 때 APT가 파일을 다시 덮어 쓰지 않도록 단계 를 추가 할 수 있습니다 .
gertvdijk

@조타실. 이것이 여전히 작동하는지 알고 있습니까? Ubuntu 18.04로 시도했지만이 Firefox를 수행하면 인증서가 전혀로드되지 않습니다. p11-kit 0.23.9-2
12

1

CCK Wizard Firefox 애드온의 기능 중 하나는 CA 인증서를 가져 오는 것입니다. 이 추가 기능을 사용하여 회사 CA 인증서를 포함하는 사용자 지정 추가 기능을 만듭니다. 그런 다음 모든 워크 스테이션에서 업데이트를받는 내부 저장소의 .deb에 사용자 정의 xpi를 패키지합니다.

CCK 마법사

편집 : Ubuntu 용 xpi를 패키지하려면 / usr / lib / firefox-addons / extensions / [addon-name @ servername] 디렉토리가 포함 된 패키지를 작성하고 xpi의 전체 내용을이 디렉토리에 압축 해제해야합니다 . 예를 들어 애드온의 이름을 foobarbaz로 지정하고 업데이트하도록 설정 한 서버 (해당 기능을 사용하도록 설정 한 경우)가 intranet.example.com 인 경우 디렉토리는 foobarbaz@intranet.example.com입니다. 나는 자동 업데이트를 활성화하지 않고 대신 repo에서 deb를 업데이트합니다.


이 방법은 자체 포함되어 있으며 한곳에 많은 다른 사용자 정의를 포함 할 수 있기 때문에 다른 방법보다 선호합니다. 저자는 AMO에서 자신의 확장을 제거 한 것으로 보입니다. 이제 그는 자신의 사이트에 여기 있고 최신 xpi가 있습니다 .
Amit Naidu

1

Firefox는 새로 설치 한 후에 작동합니다. 인증서 데이터베이스를 cert8.db삭제하면 다음 Firefox 시작시 다시 생성됩니다. 이는 시스템 전체에 CA 인증서의 기본 저장소가 있음을 강력히 제안합니다.

Firefox의 소스 코드 내장 된 CA 인증서가 실제로 firefox실행 파일 로 하드 코딩되어 있음보여줍니다 . 이들은 security / nss / lib / ckfw / builtins / certdata.txt에 있습니다.

따라서 시스템 전체에 인증서를 설치할 방법이 없습니다. 소스 코드를 패치하면 지적 재산권 문제가 발생할 수 있습니다.


1

내 사용자를 위해이 작업을 수행하는 "UEV (User Environment Virtualization)"응용 프로그램을 사용하고 있지만 Windows 클라이언트의 로그온 스크립트를 사용하여이 작업을 수행 할 수 있습니다. % APPDATA % \ Mozilla \ Firefox \ % PROFILE % 경로를 동적으로 찾기 위해 모든 코드를 게시하지는 않지만 찾을 때 기본 명령을 사용하여 스크립트를 가져올 수 있습니다. 기본적으로 Firefox profiles.cert 파일을 읽고 Firefox profile / cert8.db의 경로를 결정합니다.

certutil.exe 응용 프로그램을 사용하는 것이 좋습니다. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil

신뢰할 수있는 인증서를 중앙 위치에서 시스템에있는 모든 사용자의 Firefox로 자동으로 가져 오는 사용자에 대해 로그온 스크립트를 실행할 수 있습니다.

내 인증서 가져 오기 vb 스크립트의 "핵심"은 다음과 같습니다.

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

나는 대부분의 경우와 기본적으로 다르게 구성되지 않으면 Firefox가 레거시 보안 데이터베이스 (cert8.db, key3.db 및 secmod.db)를 사용한다는 것을 알았습니다. 즉, 다른 명령 줄을 사용하여 인증서를 Firefox가 사용하는 올바른 데이터베이스 (certutil의 사람에게서 더 많은 것을보십시오)

따라서 시스템이 기본 데이터베이스를 사용하는 경우 명령은 다음과 같아야합니다. (dbm)

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

그렇지 않으면 다음과 같아야합니다. (sql)

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

남자 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

첫 번째 certutil명령으로 내 .pem 파일을 사용 했습니다. 단일 사용자 설정 스크립트 자동화를 찾고 있었으며 이것이 트릭입니다. 당신은해야 apt-get install libnss3-tools해야하는 certutil.
xificurC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.