Ubuntu에 인증 기관 (CA)을 어떻게 추가합니까?


166

본인의 업무는 인증서 를 지불하지 않고 업무의 다양한 측면을 안전하게 처리하기 위해 자체 인증 기관 (CA) 을 발급하기로 결정했습니다 .

  • 암호로 이메일 서명
  • 이메일 내용 암호화
  • 회사 IRC 고객 인증 기반 과 같은 것에 액세스하십시오 .
  • 이전 직원의 키를 자동으로 철회

그들은 나에게 .pem파일을 보냈는데 우분투 설치에 파일을 추가하는 방법을 모르겠습니다. 전송 된 지침은 다음과 같습니다. "Mac에서 더블 클릭하면 설치됩니다." 

어떻게 진행합니까? 나는 뭔가 어떻게해야합니까 OpenSSL을 을 만들 수있는 .key, .csr또는 .crt파일을?


2
주석 "보낸 지시했다 : \"Mac에서 더블 클릭을 설치해야합니다 \ ""내 일했다.
mzoll

답변:


231

CA 설치

PEM 형식의 인증서 (이 형식 복사 ----BEGIN CERTIFICATE----로에를) /usr/local/share/ca-certificates과 함께 이름을 .crt파일 확장자.

그런 다음를 실행하십시오 sudo update-ca-certificates.

주의 사항 :설치는 이 인증서 저장소를 사용하는 제품에만 영향을줍니다. 일부 제품은 다른 인증서 저장소를 사용할 수 있습니다. 해당 제품을 사용하는 경우이 CA 인증서를 다른 인증서 저장소에도 추가해야합니다. ( Firefox 지침 , Chrome 지침 , Java 지침 )

CA 테스트

방금 추가 한 인증서 /etc/ssl/certs/ca-certificates.crt(신뢰할 수있는 모든 CA가 함께 연결된 긴 목록)를 찾아서 이것이 작동했는지 확인할 수 있습니다 .

방금 설치 한 CA에서 서명 한 인증서를 사용하고있는 서버에 연결하여 OpenSSL의 s_client를 사용할 수도 있습니다.

$ openssl s_client -connect foo.whatever.com:443 -CApath /etc/ssl/certs

CONNECTED(00000003)
depth=1 C = US, ST = Virginia, O = "Whatever, Inc.", CN = whatever.com, emailAddress = admin@whatever.com
verify return:1
depth=0 C = US, ST = Virginia, L = Arlington, O = "Whatever, Inc.", CN = foo.whatever.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Virginia/L=Arlington/O=Whatever, Inc./CN=foo.whatever.com
   i:/C=US/ST=Virginia/O=Whatever, Inc./CN=whatever.com/emailAddress=admin@whatever.com

... snip lots of output ...

    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1392837700
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

가장 먼저 찾아야 할 것은 출력 상단 근처의 인증서 체인입니다. CA를 발급자로 표시해야합니다 (옆에 i:). 이것은 서버가 설치하려는 CA가 서명 한 인증서를 제시하고 있음을 나타냅니다.

둘째, verify return code끝이로 설정되어 있는지 확인하십시오 0 (ok).


3
이 일이 실제로 작동
Sabareesh Kkanan에게

1
firefox / chrome은 기본 인증서 저장소를 사용하지 않습니다.
Tim Strijdhorst

4
update-ca-certificate는 (아마도 의도적으로) 매우 까다로울 수 있습니다. mycert.pem.crt는 작동하지 않지만 mycert.crt는 작동했습니다. 또한 / usr / share / ca-certificates가 아니라 / usr / local / share / ca-certificates 여야한다고 생각합니다 (/etc/ca-certificates.conf에 의견이 있지만).
미로

2
crt확장 주석에 감사드립니다 . 저는이 작업을 수행하는 비결이었습니다. cert확장자가 있는 인증서를 받았으며 왜 아무것도 작동하지 않는지 혼란 스럽습니다.
Ransom Briggs

3
한 가지주의 사항 : s_client기본적으로 SNI를 보내지 않으며 서버가 다른 인증서를 가진 가상 호스트 / 사이트를 지원하는 경우 서버에 SNI가 필요할 수 있습니다. 이 경우 추가하십시오 -servername foo.whatever.com. 또는 서버 인 경우 (현대 버전) curl또는 wgetSNI를 자동으로 수행하는 경우.
dave_thompson_085

66

man update-ca-certificates :

update-ca-certificates  is  a  program  that  updates   the   directory
/etc/ssl/certs to hold SSL certificates and generates certificates.crt,
a concatenated single-file list of certificates.

It reads the file /etc/ca-certificates.conf. Each line gives a pathname
of  a  CA  certificate  under /usr/share/ca-certificates that should be
trusted.  Lines that begin with "#" are comment lines and thus ignored.
Lines  that  begin with "!" are deselected, causing the deactivation of
the CA certificate in question.

Furthermore   all   certificates   found   below   /usr/local/share/ca-
certificates are also included as implicitly trusted.

위에서 로컬 인증서 파일을 신뢰할 수있는 저장소로 가져 오는 기본 방법은 파일을 넣고을 /usr/local/share/ca-certificates실행하는 것 update-ca-certificates입니다. /etc/ssl/certs직접 만질 필요는 없습니다 .


23
확장자가 .crt 인 인증서의 이름도 필요합니다.
phyzome

@phyzome 메모에 감사드립니다. 그렇지 않으면 내 인증서를 추가 할 수 없었습니다.
Seiyria

1
--fresh작동 하도록 추가 해야했습니다. 예 :update-ca-certificates --fresh
Elijah Lynn

15

나는 같은 문제가 있었고 .pem파일의 /usr/local/share/ca-certificates이름을로 바꾸어야했습니다 .crt. .cer파일을 쉽게 변환 할 수 있습니다 .pem당신이없는 경우, 예를 들어, OpenSSL을 함께 .pem.

파일을 복사 한 후 실행해야합니다 sudo update-ca-certificates.


openssl x509 -inform DER -in certificate.cer -out certificate.crt
webwurst

14

update-ca-certificates시스템 인증서 저장소에서 읽는 응용 프로그램 에 대한 다른 대답 은 정확합니다. Chrome 및 Firefox 및 기타 일부의 경우 인증서는 Mozilla NSS 라이브러리의 백엔드 인 nssdb에 저장해야합니다.

에서 https://code.google.com/p/chromium/wiki/LinuxCertManagement :

예를 들어 SSL 서버 인증서 발급을위한 루트 CA 인증서를 신뢰하려면

certutil -d sql : $ HOME / .pki / nssdb -A -t "C,"-n <인증서 별명> -i <인증서 파일 이름>

어디 <certificate nickname>임의이며, <certificate filename>당신의 .PEM 또는가 .crt 파일입니다.

다른 유용한 참고 자료 :


감사. Chrome 53.0.2785.143 용 Ubuntu 16.04에서 작동하지만 Firefox 49에는 별도의 저장소 db가있는 것으로 보이며 다음과 같이 추가해야합니다. askubuntu.com/a/248326/535154
mauron85

그런데 Chrome을 처음 실행 하기 전에 (예 : .pki / dir이 아직없는 경우) 인증서를 설치 하려면 먼저 nssdb를 만들어야합니다.mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel

시스템 인증서 저장소에서 Chrome 및 Firefox를 읽을 수있는 방법이 있습니다. 내 답변보기 : superuser.com/a/1312419/506107
wheeler

11

데비안 기반의 최신 빌드의 경우 다음을 실행해야 할 수 있습니다.

sudo dpkg-reconfigure ca-certificates

참고 : sudo dpkg-reconfigure ca-certificates는 내부적으로 update-ca-certificates를 호출합니다.

물론이 작업을 수행하기 전에 인증서 (.crt 파일)를 / usr / share / ca-certificates에 복사해야합니다. :)


4

dwmw2의 답변 을 바탕으로 실제로 인증서 관리에 NSS를 사용하는 응용 프로그램에 시스템 신뢰 저장소를 사용하도록 지시 할 수 있습니다.

libnss3기본적으로 읽기 전용 루트 CA 인증서 세트 ( libnssckbi.so)가 제공되므로 대부분의 경우에있는 로컬 사용자 신뢰 저장소에 직접 수동으로 추가해야합니다 $HOME/.pki/nssdb. p11-kitlibnssckbi.so설치된 시스템 전체 루트 인증서에 대한 어댑터 역할을 하는 드롭 인 대체품을 제공합니다 /etc/ssl/certs.

편집하다:

의 더 많은 버전이 될 것 같다 libnssckbi.so그냥보다가 밖으로 libnss3. 다음은 모두 찾기, 백업 및 링크로 바꾸는 스크립트입니다 p11-kit.

sudo apt-get update && sudo apt-get install -y p11-kit libnss3
find / -type f -name "libnssckbi.so" 2>/dev/null | while read line; do
    sudo mv $line ${line}.bak
    sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so $line
done

원본 지침 :

이렇게하려면 설치 p11-kit하고 libnss3아직 설치 하지 않은 경우 :

sudo apt-get update && sudo apt-get install -y p11-kit libnss3

그런 다음 다음을 libnssckbi.so제공 하여 기존을 백업하십시오 libnss3.

sudo mv /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so.bak

마지막으로 심볼릭 링크를 만듭니다.

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

작동하는지 확인하려면 다음을 실행 ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so하면 링크가 표시됩니다.

lrwxrwxrwx 1 root root 49 Apr  9 20:28 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so -> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

이제를 사용하여 인증서를 CA 저장소에 추가 update-ca-certificates하면 이제 해당 인증서 libnss3를 Chrome과 같은 NSS ( )를 사용하는 응용 프로그램에서 사용할 수 있습니다 .


1

언급했듯이 NSS를 사용하는 다양한 응용 프로그램에는 자체 인증서 저장소가 있습니다. 상황이 Ubuntu certutil에 있으므로 각 응용 프로그램, 각 사용자에 대한 CA 를 수동으로 추가해야합니다.

Fedora와 같은 다른 배포판에서는 이런 종류의 Just Works ™가 설치되어있는 CA를 자동으로 신뢰하지 않는 응용 프로그램에 대해 버그를 신고해야합니다 update-ca-trust.

당신은 너무 설치하여 우분투에서이 문제를 해결할 수 p11-kit-modules는 NSS 교체 한 후 패키지 및 내장 신뢰 뿌리 와 모듈 p11-kit-trust.so에서 예를 들어 심볼릭 링크를 만들어, /usr/lib/firefox/libnssckbi.so/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

그럼 당신은 것입니다 시스템의 구성 신뢰 뿌리가 아닌 일부 하드 코딩 된 것들을 얻을. 우분투 선박 여러 참고 다른 하드 코딩 된 신뢰의 뿌리와 그 libnssckbi.so 라이브러리의 사본, 그리고 당신이 그들 모두를 교체!

cf. https://bugs.launchpad.net/ubuntu/+source/nss/+bug/1647285


내가했을 때 sudo find / -type f -name "libnssckbi.so", 그것은 발견 libnssckbi.so세 곳에서 : /usr/lib/thunderbird/, /usr/lib/firefox/,와 /usr/lib/x86_64-linux-gnu/nss/. 그래서 당신은 내가 libnssckbi.so그 세 폴더 모두에서에 링크해야한다고 말하고 p11-kit-trust.so있습니까?
wheeler

1
좋아, 연결 확인 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so> - /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so마법처럼 일했다. /usr/local/share/ca-certificates, run sudo update-ca-certificates및 PRESTO에 인증서를 추가 할 수 있었고 Chrome은 자체 서명 된 인증서를 수락하기 시작했습니다.
wheeler

0

여기에 추가하는 진지한 어리석은 대답이지만 Linux에서 certutils를 사용하여 2 시간을 보냈습니다. 모든 것이 정확하다는 것을 확신했습니다.

hutber@hutber-mint /var/www/asos-mvt-framework $ certutil -L -d sql:${HOME}/.pki/nssdb

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

anyproxy                                                     CT,, 
rootCA                                                       CT,, 
myasos                                                       CT,, 

그러나 여전히 크롬에서는 아무것도 작동하지 않았습니다. 나는 결국 모든 것을 시도했다 ....

Restarting Chrome

다음과 같은 성공의 열쇠였습니다 : Steven Monday 의 조언

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.