유효한 SSL 인증서 확인이 "자체 서명됨"으로 보고되고 루트 CA가 설치되어 있음에도 불구하고 godaddy CA 서명 사이트에 대한 우분투 14.04에서 실패합니다.

유효한 SSL 인증서 확인이 "자체 서명됨"으로 보고되고 루트 CA가 설치되어 있음에도 불구하고 godaddy CA 서명 사이트에 대한 우분투 14.04에서 실패합니다.

시스템: Ubuntu 14.04, apt-upgraded 최신 버전. openssl, ca 인증서, wget 설치

징후:

wget https://api.xxx.io다음 오류가 발생합니다.

ERROR: cannot verify api.xxx.io's certificate, issued by '/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2':
  Unable to locally verify the issuer's authority.
To connect to api.xxx.io insecurely, use `--no-check-certificate'.

어디 wget https://google.com잘 작동합니다.

openssl s_client -connect api.xxx.io:443결과는 다음과 같습니다.

CONNECTED(00000003)
depth=3 C = US, O = "The Go Daddy Group, Inc.", OU = Go Daddy Class 2 Certification Authority
verify error:num=19:self signed certificate in certificate chain
verify return:0

godaddy의 루트 인증서를 다시 설치해 보았습니다.

  1. CA cert crt 패키지를 다운로드하여/usr/share/ca-certificates/extra
  2. 실행 dpkg-reconfigure ca-certificates하고 프롬프트를 따르십시오.

불운.

또한 시도했지만 c_rehash행운이 없습니다.

이 사이트는 ubuntu 16 시스템에서 성공적으로 확인되었습니다. 제가 시도해야 할 다른 것이 있나요?

편집: 실행하면 strace -e open openssl s_client -connect api.xxx.io:443ca-certificates.crt도 열리지 않는 것으로 표시됩니다.

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/ssl/openssl.cnf", O_RDONLY) = 3
open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3
open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK) = 3
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3

편집 2: CApath를 openssl에 전달하면 작동합니다. openssl s_client -connect api.xxx.io:443 -showcerts -CApath /etc/ssl/certs

openssl.cnf를 편집하고 환경 변수로 재정의해 보았으나 여전히 작동하지 않습니다.

edit3: 2개의 서로 다른 인증서를 사용하는 2개의 서로 다른 호스트 대신 단일 호스트를 사용하여 질문을 업데이트했습니다.

답변1

편집한 대로 대부분의 질문은 아마도 교차 중복일 것입니다.https://superuser.com/questions/903247/ssl-root-ca-certificate-is-not-recognized-although-present-in-the-trust-store그리고https://serverfault.com/questions/607233/how-to-make-openssl-s-client-using-default-c.

Ubuntu 소스를 확인하지는 않았지만 Ubuntu 14.04는 명목상 OpenSSL 1.0.1f를 사용합니다. 업스트림에는 옵션이 지정되지 않은 경우 기본 신뢰 저장소를 사용하지 않게 만드는 버그가 있었고 16.04는 1.0을 사용했습니다 s_client. -CA{path,file}2g이 해결되었습니다. (분명히 16.10에서도 마찬가지지만 LTS가 아니며 더 이상 지원되지 않습니다.)

프로필은 관련이 없습니다. s_clientENGINE 및 addedOID에 대해 "library-global" 이외의 프로필 설정을 사용하지 마십시오. 둘 다 이 문제와 관련이 없습니다.

www.tcell.io그러나 ( wget리다이렉션되는 곳)과 api.tcell.io( openssl s_client연결을 지시하는 곳)은 다른 시스템이라는 점에 유의하십시오 . www.ssllabs.com/ssltest에 따르면:

  • api.tcell.io52.8.231.1 GoDaddy-SecureG2 인증서(일련 번호 00c8c641d43c76286c)를 필요한 체인 인증서로 올바르게 프로비저닝합니다(정확히 #2와 #3이 필요합니다. #4는 루트이며 필수는 아니지만 허용 가능함)

  • www.tcell.io13.57.73.170은 동일한 인증서를 제공하지만 체인 인증서는 제공하지 않음으로써 RFC를 위반합니다(다운그레이드되지만 B로 제한되는 DH-1024도 사용함). 체인 인증서가 없으면 wget인증서를 확인할 수 없습니다. 설치된 "번들"이 신뢰 저장소에 체인 인증서를 추가하는 경우 wgetOpenSSL을 사용하십시오 (web-PKI가 작동하도록 의도된 방식이 아님).체인을 구축하고 검증할 수 있습니다.

관련 정보