Linux에서 중간 CA를 신뢰하지 않습니까?


18

에서 이 블로그 .

중간 CA는 루트 CA가 서명 한 인증서로, 모든 웹 사이트에 대한 임의의 인증서에 서명 할 수 있습니다.

루트 CA만큼 강력하지만 시스템이 신뢰할 수있는 전체 목록은 없습니다. 루트 CA는 마음대로 새로운 것을 만들 수 있고 시스템은 첫눈에이를 신뢰할 수 있기 때문입니다. CT에 수천 개의 기록이 있습니다.

이번 달에는 2015 년 9 월에 시만텍이 서명 한 "Blue Coat Public Services Intermediate CA"라는 흥미로운 내용이 나타났습니다. (이 CA가 서명 한 인증서는 지금까지 CT 로그 또는 Censys에 도달하지 않았습니다.)

OS X에서 신뢰할 수있는 중간 CA를 명시 적으로 신뢰할 수없는 방법을 작성하는 것이 좋은 기회라고 생각했습니다. 루트 CA가 새로운 중간체를 동일한 조직에 전달하는 것을 막을 수는 없지만 아무 것도없는 것보다 낫습니다.

Ubuntu의 블로그 단계를 시도했을 때이 인증서를 https://crt.sh/?id=19538258 다운로드합니다 . .crt를 열면 Gnome Keyring으로 가져 오지만 인증서를 가져온 후 "신뢰할 수없는"방법을 찾을 수 없었습니다.

답변:


8

어려운 작업을하기 위해 Linux에는 인증서 작업을위한 라이브러리가 둘 이상 있습니다.

당신이 모질라의 NSS를 사용하는 경우, 당신이 할 수있는 적극적 불신 (그들의 용어)를 사용하여 인증서 의 certutil을 들에게 ' -t trustargs옵션 :

$ certutil -d <path to directory containing database> -M -t p -n "Blue Coat Public Services Intermediate CA"

파이어 폭스의 경우, <path to directory containing database>일반적으로 ~/.mozilla/firefox/<???>.profile어디에 <???>어떤 임의의보고 문자가 있습니다. (certutil은 예를 들어 우분투의 libnss3-tools 패키지에 있습니다)

고장은 다음과 같습니다.

-M 데이터베이스를 수정

-t p 신뢰를 금지로 설정

-n 명명 된 인증서에 대한 작업 수행

NSS 내에서도 모든 응용 프로그램이 동일한 데이터베이스를 공유하는 것은 아닙니다. 이 과정을 반복해야 할 수도 있습니다. 예를 들어, 변경, 크롬에 대해 동일한 작업을 수행하기 -d <path>-d sql:.pki/nssdb/.

$ certutil -d sql:.pki/nssdb/ -M -t p -n "Blue Coat Public Services Intermediate CA"

그러나 모든 응용 프로그램이 NSS를 사용하는 것은 아니므로 완벽한 솔루션은 아닙니다. 예를 들어 OpenSSL 라이브러리 로이 작업을 수행 할 수 있다고 생각하지 않습니다.

결과적으로 인증서 체인 빌딩 (TLS, IPSec 등)을 제공하기 위해 OpenSSL을 사용하는 모든 응용 프로그램은 Blue Coat 인증서가있는 체인을 신뢰하며 서명 한 루트 CA를 제거하는 것 외에는 할 수있는 일이 없습니다. NSS에 의존하는 응용 프로그램은 내부에 Blue Coat 인증서가있는 체인을 신뢰할 수 없도록보다 세밀하게 구성 할 수있는 반면, 트러스트 앵커 저장소 (인터넷의 절반을 신뢰하지 않을 경우 Symantec Root CA라고 생각하는 것은 어리 석음) .

예를 들어 OpenVPN은 인증서 라이브러리로 OpenSSL을 사용한다고 생각하므로 OpenVPN을 사용하는 상용 VPN 제공 업체에 연결하는 경우 빅 브라더가 사용자 모르게 OpenVPN 트래픽을 수신 할 수 있습니다. 정말로 염려되는 경우 상용 VPN 제공 업체의 루트 CA가 누구인지 확인하십시오. Symantec / Verisign 인 경우 다른 사람을 위해 도랑을 파야 할 때입니까?

SSH는 X509 인증서를 사용하지 않으므로 Blue Coat MITM 공격에 대한 걱정없이 SSH를 사용하여 연결하고 터널링 할 수 있습니다.


인증서를 두 번 클릭하면 그놈 키 링으로 가져 오기 위해 질문을 업데이트했습니다. 아래 답변에서 Firefox로 가져 오는 방법을 찾았습니다.
raphael

OpenSSL의 경우 인증서를 제거하는 것이 신뢰를 신뢰하는 것과 동일하지 않습니까? 결국 알고있는 인증서 만 확인할 수 있습니다.
Bratchley

1
@Bratchley-의심스러운 인증서가 TLS 핸드 셰이크의 일부로 전송되면 어떻게됩니까? 모질라 NSS, Windows 및 OS-X와 마찬가지로 항상 신뢰할 수 없다고 주장 하는 방법이 없다면 단순히 신뢰할 수 있습니다.
garethTheRed

@garethTheRed 뭔가 빠졌을 수도 있지만 라이브러리에서 인증서를 확인 해야하는 경우 CRL을 수행하지 않거나 신뢰할 수있는 루트 CA를 제거하지 않으면 문제가 해결됩니까? 클라이언트 또는 서버 인증서이든 여전히 유효성 검사가 필요합니다.
Bratchley

1
예. Bluecoat는 MITM (Man-in-the-Middle) 장치에 사용하기 위해 Verisign 이 CA 인증서를 발급했습니다 . OP는이 인증서를 불신하는 방법을 묻습니다. 따라서 이것은 루트 (Verisign)를 신뢰하지 않으려는 경우 상위 발급 CA (이 경우 루트)가 해지하지 않는 하위 인증서를 불신하는 것입니다.
garethTheRed

0

나는 아직 언급 할 수 없으므로 Ubuntu Gnome 15.10에서 @garethTheRed의 접근 방식을 사용할 때 다음과 같이 언급해야합니다.

~$ certutil -d ~/.mozilla/firefox/<directory>.default -M -t p -n "Blue Coat Public Services Intermediate CA" 
certutil: could not find certificate named "Blue Coat Public Services Intermediate CA": SEC_ERROR_BAD_DATABASE: security library: bad database.

~$ certutil -d sql:.pki/nssdb/ -M -t p -n "Blue Coat Public Services Intermediate CA"
certutil: could not find certificate named "Blue Coat Public Services Intermediate CA": SEC_ERROR_UNRECOGNIZED_OID: Unrecognized Object Identifier.

"Blue Coat Systems, Inc." 작동하지 않습니다.

(이것은 내가 가져온 인증서입니다 : https://crt.sh/?id=19538258 )


먼저 인증서를 다운로드하여 가져 왔습니까?
raphael

예, crt.sh/?id=19538258을 가져 왔습니다 . (지금 댓글을 달 수있는 것 같습니다!)
Diagon

나는 당신이 당신의 대답에 대해서만 의견을 말할 수 있다고 생각합니다. 실제로 아직 절차를 시도하지 않았습니다.
raphael

아래 내 답변을 참조하십시오
raphael

@raphael-나는 아래의 편집을 시도했다. 링크 는 "-t p"를 "금지 된 (명시 적으로 신뢰할 수 없음)"으로 설명하고 있지만 Ubuntu 15.10 매뉴얼 페이지에서는 "p-유효한 피어"로 설명합니다. 나는 당신이 잘못된 일을하지 않았기를 바랍니다.
Diagon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.