"유효한" 인증서 중에서 최종 CA 인증서를 찾는 방법

"유효한" 인증서 중에서 최종 CA 인증서를 찾는 방법

그래서 저는 두 개의 웹 서버(오래된 웹 서버와 새 서버)를 관리합니다. 이전 URL은 이전 URL을 사용하고 새 URL은 새 URL을 사용하며 둘 다 내부적으로 서명됩니다.

기존 인증서에 있는 HTTPS 인증서가 만료가 임박해서 확인해보니 1개월 남았는데 인증기관이 내부머신이어서 유효하지 않은 것으로 인식되었습니다.
그러나 유사한 내부 서명 인증서가 있는 새 서버는 다른 내부 기관에서 서명하더라도 유효한 것으로 나타납니다.

새 인증서는 괜찮은데 이전 인증서는 안되는 이유를 알아내려고 합니다. 새 인증서에 내가 인식하지 못하는 몇 가지 마법이 있습니다. 예를 들어 서명 체인의 최종 상위 인증서는 내 CA에서 잘 알려진 인증서 중 하나이지만 .crt를 요청할 때 표시되지 않습니다. ) 또는 서명 체인에 익숙하지 않은 내용이 있습니다. (내부) parent.crt가 내 우분투 클라이언트의 CA 인증서에 추가되었습니다.

우분투 데스크탑이나 Centos 클라이언트에서 어떤 cli 명령을 사용하여 알아낼 수 있나요? 새 .crt가 작동하는 이유가 인증서가 데스크탑에 설치되어 있기 때문이라면 해당 인증서가 설치된 위치를 어떻게 찾을 수 있습니까(그리고 다른 Centos 시스템에 복사하려면 어떻게 해야 합니까)?

두 서버의 체인을 식별 하려고 하는데 openssl s_client -connect -showcerts결국 내부 서명 기관 CN이 됩니다. 인증서를 다운로드하고 실행했지만 openssl verify -verbose -issuer_checks인식하는 부모 권한이 표시되지 않습니다. www.google.com에서 동일한 작업을 실행하고 친숙한 "GeoTrust Global CA" 상위 항목을 얻었으므로 로컬 CA 인증서에 내부 상위 권한을 추가하려고 하는데 어떻게 확인합니까?

모든 경우에 최종 권한이 있는 것으로 보고된 CN은 DNS 이름이 아니므로 어딘가에서 해당 .crt를 다운로드할 수 없습니다. 내가 가진 것은 새 URL에 있는 .crt의 콘텐츠뿐이므로 openssl다음에서 인증서를 조회 할 수 있습니다. 분명히 상위 .crt를 사용하는 CN이 내 로컬 CA 인증서에 없습니다. 아마도 openssl이 유효하다는 결론을 내리기 위해 내부적으로 이 작업을 수행하고 있는 것일까요?

편집: 내 크롬(libnss3) 인증서에 마스터 키가 추가된 것 같습니다. Chrome 외부에서 지원되도록 동일한 마스터 키를 추가하는 데 필요한 것(예: cli의 php 및 openssl)

답변1

누구든지 더 나은 답변을 생각할 수 있다면 그렇게 하십시오. 하지만 제가 찾은 최고의 답변은 다음과 같습니다. http://manuals.gfi.com/en/kerio/connect/content/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html

/usr/share/ca-certificates내 우분투 데스크탑에서 이것이 인증서의 기본 위치 라는 것을 알았지 만 내가 찾고 있는 위치는 내 키체인의 상위 호스트 이름과 일치하는 이름을 /usr/local/share/ca-certificates사용하고 검색하여 찾았습니다 .find -iname "*<NAME>*"

또한 내 데스크탑의 Chrome은 인증서를 유효한 것으로 인식했지만 일부 CLI 도구(openssl 포함)는 그렇지 않다는 사실도 발견했습니다. 그래서 libnssChrome이 CA 권한으로 사용하는 것으로 보이는 항목 에 추가하기 위해 문서에서 이 명령에 대한 참조를 찾았습니다.

certutil -d sql:${HOME}/.pki/nssdb/ -A -t "C,," \
         -n "<CERTIFICATE NAME>" \
         -i /usr/local/share/ca-certificates/<CERTIFICATE>.crt

위의 gfi 링크에는 ubuntu/centos에서 CA 인증서를 관리하는 데 매우 유용한 콘텐츠가 포함되어 있습니다. 다음은 우리 내부 위키를 위해 제가 기록한 내용입니다:-

리눅스(우분투, 데비안)

다음에 추가

  1. CA를 디렉터리에 복사하세요./usr/local/share/ca-certificates/
  2. 사용 명령:sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt
  3. CA 스토어 업데이트:sudo update-ca-certificates

제거하다

  1. CA를 삭제하세요.
  2. CA 스토어 업데이트:sudo update-ca-certificates --fresh

리눅스(CentOs 6)

다음에 추가

  1. CA 인증서 패키지를 설치합니다.yum install ca-certificates
  2. 동적 CA 구성 기능 활성화:update-ca-trust force-enable
  3. 다음 위치에 새 파일로 추가하세요 /etc/pki/ca-trust/source/anchors/.cp foo.crt /etc/pki/ca-trust/source/anchors/
  4. 사용 명령:update-ca-trust extract

이를 통해 다른 사람들이 정보를 찾는 시간을 절약할 수 있기를 바랍니다.

답변2

straceopenssl궁극적으로 서버 인증서의 유효성을 검사하는 신뢰할 수 있는 CA 인증서를 찾을 수 있는 위치를 파악하는 데 도움이 됩니다 .

$ strace -fe open,openat openssl s_client -connect www.google.com:443 > /dev/null
[...]
openat(AT_FDCWD, "/usr/lib/ssl/certs/1001acf7.0", O_RDONLY) = 4
depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1
verify return:1
depth=1 C = US, O = Google Trust Services LLC, CN = GTS CA 1C3
verify return:1
depth=0 CN = www.google.com
verify return:1
read:errno=0
+++ exited with 0 +++
$ openssl x509 -noout -subject < /usr/lib/ssl/certs/1001acf7.0
subject=C = US, O = Google Trust Services LLC, CN = GTS Root R1
$ ls -l /usr/lib/ssl/certs/1001acf7.0
lrwxrwxrwx 1 root root 15 Oct 30  2020 /usr/lib/ssl/certs/1001acf7.0 -> GTS_Root_R1.pem
$ dpkg -S /usr/lib/ssl/certs/1001acf7.0(:P)
ca-certificates: /usr/share/ca-certificates/mozilla/GTS_Root_R1.crt

(:P)위는 /usr/lib/ssl/certs/1001acf7.0입니다. 여기서 1001acf7은 시스템의 정식 루트 CA 목록( 정식 절대 경로를 가져오는 데 사용되는 zsh glob 한정자) 의 일부인 인증서 제목의 해시입니다. .

관련 정보