Programing

OpenSSL 확인 반환 코드 : 20 (로컬 발급자 인증서를 가져올 수 없음)

lottogame 2020. 12. 8. 07:38
반응형

OpenSSL 확인 반환 코드 : 20 (로컬 발급자 인증서를 가져올 수 없음)


Windows Vista를 실행 중이며 https를 통해 연결하여 다중 파트 형식으로 파일을 업로드하려고하는데 로컬 발급자 인증서에 문제가 있습니다. 나는 이것이 왜 지금 작동하지 않는지 알아 내려고 노력하고 있으며 나중에 이것이 해결 된 후에 내 cURL 코드로 돌아갑니다. 명령을 실행하고 있습니다.

openssl s_client -connect connect_to_site.com:443

VeriSign, Inc.의 디지털 인증서를 제공하지만 오류도 발생합니다.

Verify return code: 20 (unable to get local issuer certificate)

지역 발급자 인증서는 무엇입니까? 내 컴퓨터의 인증서입니까? 이 문제를 해결할 방법이 있습니까? -CAfile mozilla.pem 파일을 사용해 보았지만 여전히 동일한 오류가 발생합니다.


나는 같은 문제가 있었고 CA 키가 저장된 디렉토리에 경로를 전달하여 해결했습니다. Ubuntu에서는 다음과 같습니다.

openssl s_client -CApath /etc/ssl/certs/ -connect address.com:443

솔루션 : 매개 변수를 명시 적으로 추가해야합니다 -CAfile your-ca-file.pem.

참고 : -CApath다른 답변에서 언급 한 매개 변수도 시도했지만 작동하지 않습니다.

설명 : 오류 unable to get local issuer certificateopenssl루트 CA 인증서를 알지 못함을 의미 합니다.


참고 : 도메인이 더 많은 웹 서버가 있는 경우 -servername your.domain.net매개 변수 도 추가하는 것을 잊지 마십시오 . 이 매개 변수는 "ClientHello에서 TLS 확장 서버 이름 설정"입니다. 이 매개 변수가 없으면 응답에 항상 기본 SSL 인증서 (인증서가 아니라 도메인과 일치)가 포함됩니다.


이 오류는 keyUsage누락 된 자체 서명 된 인증서를 사용하는 경우에도 발생 합니다 keyCertSign.


서버가 클라이언트 인증 용으로 구성되어 있습니까? 그렇다면 서버에 연결하는 동안 클라이언트 인증서를 전달해야합니다.


Macports의 OSX OpenSSL 1.0.1i에서 동일한 문제가 발생했으며 해결 방법으로 CApath를 지정해야했습니다 (Ubuntu 버그 보고서에서 언급했듯이 잘못된 CApath 조차도 openssl이 기본 디렉토리에서 보이게합니다). 흥미롭게도 PHP의 openssl 함수 (PHPMailer 5에서 사용됨)를 사용하여 동일한 서버에 연결하면 정상적으로 작동했습니다.


클라이언트 인증 사용 :

openssl s_client -cert ./client-cert.pem -key ./client-key.key -CApath /etc/ssl/certs/ -connect foo.example.com:443

CA 및 루트 인증서를 / usr / share / ca-certificate 또는 / usr / local / share / ca-certificate에 넣으십시오. 그때

dpkg-reconfigure ca-certificates

또는 apt-get으로 ca-certificate 패키지를 다시 설치하십시오.

이렇게하면 인증서가 시스템의 DB에 수집됩니다. /etc/ssl/certs/ca-certificates.crt

그러면 모든 것이 잘 될 것입니다.


나는 같은 문제에 직면했는데, 발급자 인증서의 주체로서 발급자 주체 값을 인증서에 유지 한 후 수정되었습니다.

따라서 "인증서 (cert.pem)의 발급자 주체 값 == 발급자 주체 (CA.pem)"에서 확인하십시오.

openssl verify -CAfile CA.pem cert.pem
cert.pem : 확인


중간 및 루트 ca를 사용하여 인증서 체인 파일을 만듭니다.

cat intermediate/certs/intermediate.cert.pem certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem

chmod 444 intermediate/certs/ca-chain.cert.pem

그런 다음 확인

openssl verify -CAfile intermediate/certs/ca-chain.cert.pem \
  intermediate/certs/www.example.com.cert.pem

www.example.com.cert.pem : 확인 인증서 배포


이 오류 메시지는 CABundle이 (-CAfile ...)에 의해 제공되지 않았거나 CABundle 파일이 자체 서명 된 루트 인증서에 의해 닫히지 않았 음을 의미합니다.

걱정하지 마세요. 서버에 대한 연결은 openssl s_client에서 메시지를 수신하더라도 작동합니다 ... (다른 실수도하지 않는다고 가정)

참고 URL : https://stackoverflow.com/questions/11548336/openssl-verify-return-code-20-unable-to-get-local-issuer-certificate

반응형