Gnu / Linux가 Windows에서 기본적으로 신뢰하는 인증서를 신뢰하게 만드는 방법은 무엇입니까?


11

이 SSL 검사에 의해보고 된대로 SSL 체인이 손상된 서버가 있습니다 .

SSL 확인 보고서

나는 이것이 서버 자체에서 해결 되어야 하는 문제라는 것을 알고 있지만 때로는 수정하기가 어렵습니다 (서버 관리자가 아닙니다).

문제는 Windows의 Chrome / Mozilla / Edge 가 사이트 인증서를 신뢰한다는 것입니다 .

여기에 이미지 설명을 입력하십시오

그러나 Gnu / Linux 배포 (Docker의 Ubuntu 18.04)에서는 인증서가 신뢰 되지 않습니다 .

curl: (60) SSL certificate problem: unable to get local issuer certificate

update-ca-certificatesGlobalsign Root 인증서를 시도 하고 가져 왔습니다. update-ca-certificates이 경우 중복 인증서를보고했습니다. 어쨌든 아무것도 작동하지 않습니다.

재현하는 방법

도커 사용 :

docker run -it ubuntu:18.04

# within container:
apt-get update
apt-get -y install curl
curl https://betriebsheft.vog.it  # <---- "unable to get local issuer certificate"

Gnu / Linux가이 인증서를 신뢰하게하려면 어떻게해야합니까?

PS : 동일한 인증서가 다른 서버에 올바르게 배포되었습니다 .


왜 downvote?
우도 G

1
OP가 자신에게 영향을 줄 수없는 것을 요구하기 때문에이 질문을 주 제외로 닫으려고 투표하고 있습니다. 그는 서버 측 에서 아무것도 수정할 수 없으므로 클라이언트 측 솔루션이없는 문제를 설명하기 때문에 아마도 내가 생각하는 수퍼 유저에 속할 것이라고 말했다.
LinuxSecurityFreak

2
나는 특히 클라이언트 측 솔루션을 요구하고 있습니다. 서버에는 영향을 미치지 않지만 클라이언트 O / S (Ubuntu)를 완전히 제어 할 수 있으며이 특정 O / S 설치는 다른 O / S (Windows)와 마찬가지로 인증서를 신뢰하기를 원합니다. 다른 사람을 위해 HTTPS 사이트를 수정하는 것이 아닙니다.
우도 G


1
서버는 제어하지 않지만 서버를 제어하는 ​​사람에게 문제를보고 할 수 있습니다.
Michael Hampton

답변:


11

이를위한 진정한 해결책은 서버 가 엔드 엔터티 (서버) 인증서뿐만 아니라 체인의 모든 인증서를 제공하도록하는 것 입니다.

서버 관리자에게 RFC 5246 7.4.2 절 을 지시하십시오. 이 메시지이 메시지가 서버의 인증서 체인 을 클라이언트에게 전달 함 을 분명히 나타냅니다 .


관리자가 어떤 이유로이 작업을 거부 / 수행 할 수없는 경우 다른 방법은 curl잘못된 핸드 셰이크를 사용하는 것입니다.

컬 메일 링리스트의 메시지에 따르면 :

cURL이 중간 인증서를 지원하는지 여부를 확인할 수 있습니까?

그렇습니다. 모든 CA 인증서에는 루트까지 인증서 체인이 있습니다. curl과 함께 사용하는 ca 번들은 전체 체인에 대한 인증서로 구성되어야합니다.

/ daniel.haxx.se

루트 CA 및 모든 중간체 인증서를 번들에 추가하고 옵션을 curl사용하여이를 가리킬 수 있어야합니다 --cacert <file>.

브라우저가 작동함에 따라 올바른 CA 인증서에 액세스 할 수 있습니다. 인증서 탭 (브라우저마다 다름)을 확인하고 인증서 체인을 확인하십시오. 루트 CA 첫 두 번 클릭 G1을 - Globalsign 루트 CA를 과에서 세부 정보 탭을 클릭합니다 ... 파일을 복사합니다 . 로 저장하십시오 root.cer. AlphaSSL CA-SHA256-G2 와 동일한 작업을 수행하고 파일을 다른 이름으로 저장하십시오 issuing.cer. 둘을 하나의 파일 (예 :) chain.cer로 결합하고에 대한 인수로 사용하십시오 -cacert.

@AB가 친절하게 지적한 것처럼 누락 된 인증서는 여기 에서도 찾을 수 있습니다 .


브라우저는 CA 인증서를 캐시하기 때문에 작동합니다. 과거에 서버의 인증서와 동일한 CA에서 발급 한 인증서로 올바르게 구성된 웹 사이트를 탐색 한 경우 브라우저에 의해 캐시됩니다. 나중에 잘못 구성된 사이트를 방문하면 브라우저는 캐시에있는 CA 인증서를 사용하여 체인을 만듭니다. 배후에는 서버가 잘못 구성되어 있지만 모든 것이 괜찮은 것처럼 보입니다.

Windows에서는 IE / Edge 및 Chrome이 동일한 캐시를 공유하지만 Firefox는 자체 캐시를 사용합니다.

위의 것 외에도 IE / Edge 및 Chrome은 동일한 암호화 스택을 공유하므로 AuthorityInformationAccess 라는 인증서 내에서 확장을 사용합니다 . 여기에는 최종 엔티티 인증서의 CA 인증서를 다운로드 할 수있는 URL을 제공 하는 caIssuer 옵션이 있습니다. 따라서 이러한 브라우저 중 하나가 이전 찾아보기에서 누락 된 인증서를 캐시하지 않은 경우에도 필요한 경우 가져올 수 있습니다. Firefox는이 작업을 수행하지 않으므로 IE / Edge 및 Chrome이 작동하는 경우 Firefox에서 인증서 오류를 표시하는 경우가 있습니다.


1
내 서버가 아니므로 서버 측에서는 아무것도 수정할 수 없습니다. curl.haxx.se/docs/caextract.html(Firefox 가 인증서를 신뢰하기 때문에) 에서 CA 번들을 사용하려고 시도했지만이를 사용 --cacert cacert.pem했지만 CURL은 여전히 ​​인증서를 승인하지 않습니다.
우도 G

1
그것은 이다 서버. 실행 echo q | openssl s_client -showcerts -connect betriebsheft.vog.it:443하면 서버에서 하나의 인증서 만 제시됩니다. 최종 엔터티 인증서 (제공되는 인증서)와 발급 CA (알파 SSL-SHA256-G2 인증서)가 있어야합니다. 후자는 서버에 의해 전송되지 않지만 반드시 서버에 의해 전송됩니다.
garethTheRed

2
@garethTheRed : 서버가 모든 인증서를 제공하지는 않지만 서버가 내 통제하에 있지 않다는 것을 이해합니다 ( "내 서버가 아님"의 의미). 외국 서버의 API에 액세스하려고합니다. Windows에서는 내 브라우저가 인증서에 대해 불평하지 않으며 Linux / Debian / Ubuntu 만 해당합니다.
우도 G

@AB : 감사합니다! 해당 페이지에서 모든 루트 인증서를 설치 하면 문제가 해결되었습니다 . 그러나 수동 단계가 필요한 이유를 알고 싶습니다.
우도 G

2
누락 된 중간 인증서 (@garethTheRed에서 언급 한대로)는 support.globalsign.com/customer/portal/articles/… 에서 찾을 수 있습니다 . OP는 처음에 이미 설치된 루트 인증서 만 추가하려고 했기 때문에 아무것도 달성하지 못했습니다.
AB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.