SSL 오류 : 로컬 발급자 인증서를 가져올 수 없습니다.


95

Debian 6.0 32 비트 서버에서 SSL을 구성하는 데 문제가 있습니다. 저는 SSL을 처음 사용하므로 참아주세요. 가능한 한 많은 정보를 포함하고 있습니다.
참고 : 서버의 ID와 무결성을 보호하기 위해 실제 도메인 이름이 변경되었습니다.

구성

서버가 nginx를 사용하여 실행 중입니다. 다음과 같이 구성됩니다.

ssl_certificate           /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key       /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               HIGH:!aNULL:!MD5;
ssl_verify_depth          2;

여기에 설명 된 방법을 사용하여 인증서를 연결 했습니다.

cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt

mysite.ca.crt서명 기관에서 나에게 제공 한 인증서는 어디에 있고 bundle.crt내 서명 기관에서 나에게도 보낸 CA 인증서는 어디에 있습니까 ? 문제는 GlobalSign에서 직접 SSL 인증서를 구매하지 않고 대신 호스팅 제공 업체 인 Singlehop을 통해 구매했다는 것입니다.

테스팅

인증서는 Safari 및 Chrome에서 올바르게 검증되지만 Firefox에서는 검증되지 않습니다. 초기 검색 결과 CA에 문제가있는 것으로 나타났습니다.

비슷한 질문에 대한 답을 탐색 했지만 각 인증서가 어떤 용도로 사용되는지 실제로 이해하지 못해 해결책을 찾지 못했습니다.

나는 openssl의 s_client를 사용하여 연결을 테스트 하고 유사한 질문과 동일한 문제를 나타내는 것으로 보이는 출력을 받았습니다 . 오류는 다음과 같습니다.

depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1

openssl의 응답에 대한 자세한 내용 (인증서 및 불필요한 정보 잘림 포함)은 여기 에서 찾을 수 있습니다 .

나는 또한 경고를 본다.

No client certificate CA names sent

이것이 문제 일 가능성이 있습니까? nginx가 이러한 CA 이름을 전송하는지 어떻게 확인할 수 있습니까?

문제 해결 시도

GlobalSign에서 직접 루트 CA를 다운로드하여 문제를 해결하려고했지만 동일한 오류가 발생했습니다. update-ca-certificates명령을 사용하여 Debian 서버에서 루트 CA를 업데이트 했지만 변경된 사항이 없습니다. 내 공급자가 보낸 CA가 정확했기 때문에 인증서가 두 번 연결되어 도움이되지 않았기 때문일 수 있습니다.

0 s:/OU=Domain Control Validated/CN=*.mysite.ca
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

다음 단계

시도해 볼 수있는 것이 있거나 전체를 잘못 구성한 경우 알려주세요.


10
도메인 인증서는 발급자가 서명했습니다 AlphaSSL CA - SHA256 - G2. 그러나 체인은 중간 AlphaSSL CA - G2. 현재 중간 인증서 ( AlphaSSL CA - G2) 를 삭제하고 지문 ae:bf:32:c3:c8:32:c7:d7...( AlphaSSL CA - SHA256 - G2) 이있는 인증서로 교체 해야한다고 생각합니다 . 또한 을 보낼 필요 가 없습니다GlobalSign Root CA . 클라이언트는 자신의 (또는 중개자) 신뢰를 루트해야합니다.
jww

6
OpenSSL을 사용하여 로컬에서이를 테스트 할 수 있습니다. 시도해보십시오 openssl s_client -connect <server>:<port> -CAfile <GlobalSign Root CA.pem>. 명령은 Verify OK (0)또는 이와 유사한 것으로 완료되어야합니다 . 를 받으면 Verify OK (0)서버가 올바르게 구성된 것입니다 (이 문제에 대해).
jww

6
새 중간체를 다운로드 할 때 .NET을 사용하여 PEM으로 변환해야합니다 openssl x509 -in gsalphasha2g2.crt -inform DER -out Alpha-SHA256-G2.pem -outform PEM.
jww

아름다운. 나는 그것이 지금 작동하고 있다고 믿습니다. 어떤 이유로 나는 SHA 256을 얻으려고 시도했지만 제대로 변환하지 못했을 것입니다. 진심으로 감사드립니다.
Jamie Counsell

1
예, 찾아야 할 것은 루트 또는 CA로 돌아가는 Subject-Issuer 쌍입니다. OpenSSL을 표시 그 같은 i:s:에서 s_client. 필요한 인증서가 있으면 루트를 제외한 모든 인증서를 연결합니다 . 연결되기 때문에 PEM ​​형식이어야합니다. URL이 도움이되었습니다. 정보를 제공하지 않는 사람들을 돕기 위해 늙어 가면서 s_client. (URL을 제공하지 않았다면 닫기로 투표했을 것입니다).
jww

답변:



-1

Linux 사용자 인 경우 다음을 실행하여 노드를 최신 버전으로 업데이트하십시오.

sudo apt update

 sudo apt install build-essential checkinstall libssl-dev

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.1/install.sh | bash

nvm --version

nvm ls

nvm ls-remote

nvm install [version.number]

이것은 당신의 문제를 해결할 것입니다

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