openssl verify - 단일 결합 인증서 번들 파일을 확인하는 방법

openssl verify - 단일 결합 인증서 번들 파일을 확인하는 방법

나는 브라우저 기반 관리 인터페이스를 사용하는 제품을 유지/개선합니다. 우리는 파티에 늦었고 이제 브라우저와 백엔드 사이에서 HTTPS를 지원하려고 합니다(Apache httpd는 Tomcat 앞에 있으며 모두 Linux에서 실행됩니다).

그래서... 저는 새로운 영역을 탐색 중입니다. 그 중 하나는 인증 기관에서 얻은 인증서를 다루는 것입니다.

테스트/교육 목적으로 CA로부터 자체 인증서를 받았습니다. CA에 CSR을 제공했고 그 대가로 다음 두 가지를 받았습니다.

  1. server.crt 및
  2. middles.crt(적어도 하나 이상 포함된 파일 - 아마도 그 이상? - 중간 인증서)

IIUC 두 파일 모두 Apache에 설치되어야 합니다. 하지만 우리 제품과 함께 제공되는 Apache는 더 새로운 버전이기 때문에 (httpd.conf 지시어를 읽어보세요)SSL 인증서 체인 파일'는 버전 2.4.8 이후 제거되었으므로 CA의 두 파일은 아래와 같이 하나의 파일로 병합되어야 합니다(Apache를 사용하여 'SSL 인증서 파일'는 파일을 가리킵니다):

cat server.crt intermediates.crt > combined.crt

좋아요 아파치는 행복합니다.

내가 가진 문제는 "combined.crt" 파일의 정확성을 확인하는 방법입니다. 이 파일은 사용자가 생성하고 사용자가 혼란을 겪게 되므로 파일에 대한 유효성 검사를 수행하고 싶습니다. FWIW... 우리 제품은 사용자로부터 Linux를 완전히 숨깁니다. 사용자는 Linux 명령 프롬프트, 루트 등에 액세스할 수 없습니다. 당사 제품을 관리하기 위한 사용자의 모든 작업은 당사 제품의 프런트 엔드 인터페이스를 통해 수행됩니다. 따라서 사용자가 Linux 프롬프트를 입력하는 것과 관련된 답변은 작동하지 않습니다.

CA에서 제공한 파일에서 생성된 사용자 입력 "combined.crt"의 유효성을 검사하기 위해 "openssl"을 사용할 수 있는 방법을 찾을 수 없습니다.

  1. 인증서가 포함되어 있고 혼란스러운 사용자의 임의의 쓰레기가 아닌 경우
  2. 파일에 포함된 인증서가 실제로 유효한 인증서 체인을 형성하는지 확인하십시오. 즉, 파일의 인증서가 올바른 순서로 되어 있는지 확인하십시오.

내가 원하는 것을 수행하는 것이 가능하다는 것을 알고 있지만 openssl verify ...이를 작동하게 하는 유일한 방법은 두 CA에서 별도로 제공하는 파일을 지정하는 것입니다...

openssl verify -CAfile intermediates.crt server.crt

사용자가 이 두 파일을 별도로 제공하도록 인터페이스를 디자인할 수 있을 것 같습니다. 사용자가 텍스트 편집기를 사용하여 두 파일을 올바른 순서로 결합하기를 기대하는 대신 이 작업을 수행하게 될 수도 있습니다(나에게는 더 많은 작업이 필요하지만 사용자에게는 더 쉽고 안전합니다). 하지만 이 시점에서는 - 맙소사 - 이제 그것은 나에게 학습 연습에 더 가깝습니다. Apache가 요구하는 것처럼 단일 인증서 파일의 유효성을 검사하기 위해 "openssl"을 얻을 수 있는 방법이 있는 것 같습니다...?

어떤 안내에도 감사드립니다.

답변1

openssl(또는 최소한 하위 명령 ) 입력을 읽을 때 openssl x509더 많은 입력이 있어도 건드리지 않고 여러 openssl명령을 연결하여 여러 결합된 인증서를 처리할 수 있으며 텍스트를 사용하지 않고도 쉽게 다시 분할할 수 있습니다. .

중간 인증서는 신뢰할 수 없습니다. 일반적으로 운영 체제 저장소에 있는 루트 인증서(일반적으로 Mozilla, Google Microsoft 등에서 제공하는 목록)만 신뢰할 수 있습니다. 따라서 -CAfile중간 인증서와 함께 사용하면 안 됩니다(해당 인증서를 허용하더라도). 그렇지 않으면 전체 체인을 확인하지 않습니다. -trusted실제로(자체 서명)뿌리인증서이지만 일반적으로 운영 체제 저장소에 추가되지 않은 내부(비공용) 루트 CA에만 필요합니다.

모든 중간 인증서는 매개변수를 통해 제공되어야 합니다 -untrusted.

파이프와 같은 출력을 파일과 같은 매개변수로 변환하는 것은 잘 지원되는 bash셸의 편리한 구성을 사용합니다 . 아래에서 몇 번 반복했습니다( 두 번 읽으세요). 더 나은 스크립트나 언어를 사용하면 피할 수 있지만 여전히 매우 간단합니다.<()opensslcombined.crt

명령은 다음과 같습니다( bash셸 필요).

openssl verify -untrusted <( { openssl x509 >/dev/null; cat; } < combined.crt ) <(openssl x509 < combined.crt)

첫 번째 읽기에서는 combined.crt더미 사용을 통해 서버 인증서를 삭제하고 openssl x509(모든) 후속 중간 인증서를 반환하며, 두 번째 읽기에서는 combined.crt첫 번째(서버) 인증서를 사용하고 다른 모든 인증서를 삭제합니다.

관련 정보