컬 : 로컬 발급자 인증서를 가져올 수 없습니다. 디버깅하는 방법? 있습니다. LAMP dev 시스템 (Debian)을 PHP

이상한 문제가 있습니다. LAMP dev 시스템 (Debian)을 PHP 7로 업데이트했습니다. 이후 Curl을 통해 특정 TLS 암호화 API에 더 이상 연결할 수 없습니다.

해당 SSL 인증서는 thawte에 의해 서명됩니다.

curl https://example.com

나에게 준다

curl: (60) SSL certificate problem: unable to get local issuer certificate

이므로

curl https://thawte.com

물론 Thawte의 작품에도 서명되어 있습니다.

curl 및 브라우저를 통해 내 컴퓨터와 같은 다른 컴퓨터에서 HTTPS를 통해 API 사이트에 액세스 할 수 있습니다. 따라서 인증서는 확실히 유효합니다. SSL Labs 등급은 A입니다.

내 dev 시스템에서 다른 SSL 암호화 사이트로의 다른 컬 요청은 작동합니다. 루트 인증서가 최신 상태입니다. 확인하기 위해을 실행했습니다 update-ca-certificates. 심지어 http://curl.haxx.se/ca/cacert.pem 을 / etc / ssl / certs에 다운로드 하여 실행했습니다 c_rehash.

여전히 같은 오류입니다.

확인 프로세스를 디버깅하고 파일 이름과 같이 찾을 수없는 로컬 발급자 인증서 컬 (또는 openssl)을 확인하는 방법이 있습니까?

최신 정보

curl -vs https://example.com

알려줍니다 (IP + 도메인 익명화)

* Hostname was NOT found in DNS cache
*   Trying 192.0.2.1...
* Connected to example.com (192.0.2.1) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0

echo | openssl s_client -connect example.com:443

준다

CONNECTED(00000003)
depth=2 C = US, O = "thawte, Inc.", OU = Certification Services Division, OU = "(c) 2006 thawte, Inc. - For authorized use only", CN = thawte Primary Root CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=DE/ST=XYZ/CN=*.example.com
   i:/C=US/O=thawte, Inc./CN=thawte SSL CA - G2
 1 s:/C=US/O=thawte, Inc./CN=thawte SSL CA - G2
   i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
 2 s:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
   i:/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
---
Server certificate
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
subject=/C=DE/ST=XYZ/CN=*.example.com
issuer=/C=US/O=thawte, Inc./CN=thawte SSL CA - G2
---
No client certificate CA names sent
---
SSL handshake has read 4214 bytes and written 421 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: [...]
    Session-ID-ctx:
    Master-Key: [...]
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 5a 95 df 40 2c c9 6b d5-4a 50 75 c5 a3 80 0a 2d   Z..@,.k.JPu....-
    [...]
    00b0 - d5 b9 e8 25 00 c5 c7 da-ce 73 fb f2 c5 46 c4 24   ...%.....s...F.$

    Start Time: 1455111516
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
DONE


답변

openssl s_client -connect thawte.com:443쇼 사용하기 :

---
Certificate chain
 0 s:/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/O=Thawte, Inc./C=US/ST=California/L=Mountain View/businessCategory=Private Organization/serialNumber=3898261/OU=Infrastructure Operations/CN=www.thawte.com
   i:/C=US/O=thawte, Inc./CN=thawte Extended Validation SHA256 SSL CA
 1 s:/C=US/O=thawte, Inc./CN=thawte Extended Validation SHA256 SSL CA
   i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2008 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA - G3
---

마지막 “i”는 발급 된 자체 서명 된 루트 CA를 보여줍니다. 특정 Thawte 루트 CA _i.e. 차 루트 CA – G3의 인증서는, 당신에없는 /etc/ssl/certs합니다 (에 명시된 디렉토리 curl출력, openssl s_client기본 CA 경로를 가지고 있지 않으며, 명시 적으로 주어진 일에 필요 -CApath /etc/ssl/certs ).

해당 인증서를 /etc/ssl/certs디렉토리에 명시 적으로 추가 하고 다시 실행 c_rehash해도 확실히 손상되지는 않습니다. 그리고 예를 들어 검증 된대로 작동한다면, openssl s_client -connect example.com:443 -CApath /etc/ssl/certsupdate-ca-certificates명령이 왜이 루트 CA를 선택하지 않은지에 대한 검사 / 디버깅이 필요할 수 있음을 알고 있습니다.

위의 루트 CA가 이미 /etc/ssl/certs디렉토리에 있고 위의 단계가 적용되지 않았을 수 있습니다. 이 경우, 확인을 위해 두 가지 다른 발급 CA 인증서 (적어도 제공 한 인증서 체인에 있음 thawte.com:443)가 thawte Primary Root CAthawte SSL CA-G2가 있습니다. 위의 단계를 반복하여 이러한 인증서를 /etc/ssl/certs디렉토리 에 설치 하고 다시 실행하면 c_rehash작동 할 수 있습니다. 이 두 개는 루트 CA가 아닌 중간 CA이므로 그 중 하나가 없으면 결과를 설명 할 수 있으며에서 간과 한 인증서로 예상 될 수 있습니다 update-ca-certificates.

도움이 되었기를 바랍니다!


답변

사이트의 공개 키 인증서 파일에서 잘못된 사이트 순서, 발급, 중간 및 루트 인증서로 인해 발생할 수 있습니다.

브라우저는 맨 아래 방향 (루트, 중간, 발행, 사이트)으로 인증서 를 표시 하지만 인증서 맨 아래 방향 (사이트, 발행, 중간, 루트)으로되어 있어야합니다 .