원격 서버 SSL 인증서를 파일로 로컬로 저장하는 방법


319

원격 서버의 SSL 인증서 (HTTPS는 아님)를 다운로드해야하지만 SSL 핸드 셰이크는 Chrome / IE / wget과 동일해야하며 컬은 모두 인증서 확인 실패 오류를 발생시킵니다) 랩톱에서 신뢰할 수있는 인증서를 추가하십시오. IT 담당자에게 CA 인증서를 제공 할 수 없기 때문에 인증서 저장소.

이것은 사무실 통신을위한 것이므로 실제 클라이언트를 사용하여 인증서를 얻을 수는 없습니다.

어떻게해야합니까? Windows 7과 Linux 더미가있어서 도구 / 스크립팅 언어가 좋습니다.


메일 서버 의 인증서를 얻으려면 security.stackexchange.com/questions/70528/…를
브라질 사람 Guy

대부분의 경우 브라우저에는 "개발자 도구"아래에이를위한 기능이 내장되어 있습니다.
nobar

답변:


316

OpenSSL에 액세스 할 수 있으면

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

{HOSTNAME} 및 {PORT}를 값으로 바꾸십시오.


2
GUI를 열 필요가 없으므로이 옵션을 선호하며 서버에서 SSH를 통해 할 수 있습니다.
bramp

2
또한 HTTP 이외의 프로토콜에서도 작동합니다.
matt

14
elec3647의 솔루션 은 쉘 파이프 라인에서 PEM 추출을 완전히 자동화합니다.
phs

4
HTTPS의 기본 포트는 443입니다.
Flimm

4
-servername가상 호스트 인증서를 얻는 옵션이 필요했습니다 . gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971
Artistan

240

인증서를 가져오고 다운로드하는 빠른 방법은 -showcerts의 출력을 x509 ssl 명령으로 파이프하여 외부의 모든 것을 제거하는 다음 명령을 실행하는 것입니다. 예를 들면 다음과 같습니다.

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

wget과 함께 인증서를 사용하려면

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem

5
나는 이것을 (다른 웹 사이트에서) 시도했지만 전체 인증서 체인이 예상되었습니다.이 체인에서 처음으로 돌아온 것 같습니다.
monojohnny

8
그것은 나를 위해 작동하지 않습니다 : 인증서 27262 : 오류 : 0906D06C : PEM 루틴을로드 할 수 없습니다 : PEM_read_bio : 시작 라인 없음 : / SourceCache / OpenSSL098 / OpenSSL098-50 / src / crypto / pem / pem_lib.c : 648 : 예상 : 신뢰할 수있는 인증
Janusz

4
나는 monojohnny에 동의합니다, 이것은 당신에게 완전한 사슬을주지 않습니다.
Michael Munsey

4
늦은 @monojohnny : openssl s_client -showcerts수신 된 체인의 모든 인증서를 표시 하지만 (연결에 성공한 경우) openssl x509첫 번째 파이프 만 가져오고 나머지는 버립니다. 대신 모두 사용 ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'하거나 ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'약간 더 복잡한 방법 awk을 사용하여 각 인증서를 별도의 파일에 넣고 openssl다른 도구 와 함께 사용하기가 더 쉽습니다 .
dave_thompson_085

3
wget을 사용하면 index.html=> 저장 HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
만하

126

솔직히 말해서, 나는 전에 이것을 시도하지 않았지만 (필요하지는 않았지만) Firefox에서 시도했지만 저장을 위해 작동하는 것 같습니다.

  1. 맨 위에있는 SSL 인증서 아이콘을 클릭하고 맨 아래에있는 자물쇠를 클릭하십시오.
  2. 딸깍 하는 소리 View Certificate
  3. Details탭을 클릭하십시오
  4. 계층 구조에서 원하는 인증서 선택 [그림에 동그라미 표시되지 않음]
  5. 딸깍 하는 소리 Export

대체 텍스트


알아두면 좋은 점이지만 호기심 때문에 달성하려는 것을 조금 더 설명해 주시겠습니까? SSL 클라이언트 인증서를 내보낼 필요가 없었으며 실제로 왜 그렇게해야하는지 궁금합니다.
William Hilsum

1
클라이언트 인증서가 아닌 서버 인증서입니다. 클라이언트 개인 키 및 인증서를 내보내는 주된 이유는 백업을 유지하거나 다른 브라우저 나 컴퓨터를 사용하여 인증하려는 경우입니다.
gbroiles

@gbroiles-질문을 읽고 잘못된 용어를 사용했지만 문제가 해결되었습니다.
윌리엄 힐섬

1
맞습니다. 귀하의 질문에 답변했습니다. 왜 누군가가 클라이언트 인증서를 저장하고 싶습니까? "SSL 클라이언트 인증서"는 그의 용어가 아니라 귀하의 용어였습니다.
gbroiles

1
Chrome 에서이 작업을 수행 할 수있는 방법이 아닌 것 같습니까?!
fatuhoku

50

Chrome 브라우저를 사용하여 인증서 내보내기

  1. SSL을 사용하여 웹 사이트에 연결하십시오 ( https : // whatever )

2. 자물쇠 기호를 클릭 한 다음 자세히를 클릭하십시오.

  1. Chrome 버전 56부터 다음을 수행합니다. Three Dots Menu-> More Tools-> Developer Tools로 이동 한 다음 Security 탭을 클릭하십시오. 이것은 당신에게 줄 것이다 보안 개요 A의 인증서보기의 버튼을 누릅니다.

  2. 인증서보기 버튼을 클릭하십시오 .

    모달 창이 열립니다. 두 개의 창이 있습니다. 최상위 인증서는 사이트 인증서 (마지막 인증서), 중간 인증서 및 루트 인증서 (최상위 인증서)의 신뢰 계층을 보여줍니다.

    두 번째로 큰 분할 창에는 인증서 중 하나의 세부 사항이 표시됩니다.

    중간 인증서가 0 개 이상있을 수 있습니다.

    루트 인증서에는 금색 테두리 아이콘이 있습니다. 나머지는 파란색 테두리가 있습니다.

    아래 스크린 샷을 참조하십시오.

  3. 인증서를 내보내려면

    1. 먼저 트러스트 계층에서 인증서 아이콘을 클릭하십시오.
    2. 인증서는 모달의 주요 부분에 표시됩니다.
    3. 모달의 주요 부분에서 인증서의 큰 아이콘을 클릭하십시오. 아이콘을 데스크탑으로 드래그 하십시오. 그런 다음 Chrome은 인증서를 데스크톱에 복사합니다.

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


1
아이콘을 텍스트 편집기로 드래그해야했는데 데스크탑이 작동하지 않았습니다.
코리 클라인

2
Windows의 Chrome의 경우 '인증서보기'를 클릭하면 모달이 Mac과 다릅니다. 자세히 탭을 클릭 한 다음 파일로 복사 ...를 클릭 한 다음 간단한 형식과 파일 이름을 선택하십시오.
PolyTekPatrick

1
Mac OS에서 Chrome v63을 사용할 때 인증서를 드래그하여 얻은 텍스트 파일은 사람이 읽을 수 있지만 X.509 .crt와 같은 기계로 읽을 수있는 형식으로 변환하는 방법을 알아낼 수있는 구조화 된 형식은 아닙니다.
Jim DeLaHunt 2012

주소 표시 줄이
나이

1
Chrome에서 더 이상 작동하지 않음 72.0.3626.121
A. D' Alfonso

20

이것은 gbroiles의 답변 이지만 cURL 프로젝트 에는openssl 원격 서버의 SSL 인증서를 저장하는 데 사용 하는 방법 에 대한 자세한 내용이있는 페이지가 있음을 지적하고 싶습니다 .

  • openssl s_client -connect {HOSTNAME} : {PORT} | 티 로그 파일
  • 입력 QUIT하고 Enter / Return 키를 누릅니다.
  • "BEGIN CERTIFICATE"와 "END CERTIFICATE"마커 사이에 인증서가 나열됩니다.
  • 인증서의 데이터를 보려면 다음을 사용할 수 있습니다.

    openssl x509-PEM 정보-인증서 파일 -text -out certdata

    에서 certfile추출 된 인증서는 어디에 있습니까 logfile? 에서 찾아보십시오 certdata.


이것은 나를 위해 일했습니다. 좀 더 명확하게하기 위해 로그 파일을 편집하고 BEGIN CERTIFICATE 및 END CERTIFICATE 외부에있는 모든 것을 다듬고 결과를 certfile.pem으로 저장했습니다 (확장명이 필요한지 확실하지 않음).
Michael Welch

16

자동화

서버의 가상 호스트에서 올바른 인증서를 받으려면 -servername이 필요했습니다.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

데스크탑 용 인증서로 변환 할 수도 있습니다.

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

마지막 부분은 인증서에 추가하는 것입니다.
내가 사용한 Mac 키 체인의 Windows에서는 확실하지 않습니다 .

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer



일부 응용 프로그램은 System 및 SystemRoot 키 체인 (Golang, 당신을보고 있습니다)에 문제가 있으므로 해당 수준에 대한 신뢰를 설치하고 설정 한 후에 login.keychainKeychain Access응용 프로그램을 통해 자신의 사용자에게 복사 할 수도 있습니다. System / SystemRoot에서 인증서를 찾아서 클릭하여 login키 체인으로 드래그하면됩니다 .
dragon788

1
@ dragon788-내 의도는 이것을 명령 줄로 자동화하는 것이었고 이것은 나를 위해 작동합니다. CLI를 통해 login.keychain에 대한 솔루션을 찾으면 여기에서 공유하십시오! 감사!
Artistan

내가 웹에서 읽은 내용으로 판단하면 -dfrom 명령을 생략 하면 시스템 키 체인 대신 사용자 키 체인에만 적용됩니다.
dragon788

중간 인증서도 추가하는 경우 올바르게 추가하기 위해 trustAsRoot대신 사용하려고합니다 trustRoot.
dragon788

2

인증서 만 포함 된 결과가 제공됩니다.

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "

0

Windows의 경우 훨씬 쉬운 방법을 찾았습니다. Microsoft Edge (미 크롬 이전)를 시도하고 주소 표시 줄에서 잠금을 클릭하면-인증서보기 대화 상자에 "파일로 내보내기"버튼이 표시되어 .crt 파일로 저장됩니다.

내가 Edge를 많이 사용하지는 않았지만 이것은 케이크 조각이었습니다.

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