
nginx/1.10.0 + letsencrypt가 포함된 우분투 서버(16.04)에 여러 사이트가 있습니다.
SSL은 브라우저의 모양에 따라 완벽하게 작동합니다. 그러나 컬 요청(SSL 포함)을 사용하는 개발자 애플리케이션에서는 다음과 같은 오류가 발생합니다.
Update Failed: Download failed. cURL error 51: SSL: certificate subject name 'domain2.com' does not match target host name 'domain1.com'
SSLLABS를 이용하여 확인해보니 A_grade로 나오나 여러 개의 인증서(동일 서버에 있는 다른 도메인의 인증서)를 로드하고 있습니다.
Certificate #1: RSA 2048 bits (SHA256withRSA)
그리고
Certificate #2: RSA 2048 bits (SHA256withRSA) No SNI
두 번째 인증서에는 다음과 같은 오류가 있습니다.
Common names domain2.com MISMATCH
Trusted No NOT TRUSTED
Curl 오류는 두 번째 도메인 이름에 대해서도 말하고 있었습니다.
cURL error 51: SSL: certificate subject name 'domain2' does not match target host name 'domain1'
domain2는 완전히 다른 사이트입니다. nginx가 domain1과 함께 정보를 어떻게 보내는지 모르겠습니다.
또한 Letsencrypt SSL을 사용하여 도메인을 생성하여 다른 서버에서 동일한 시나리오를 테스트했는데 모두 동일한 문제가 있습니다. SSLlabs로 확인할 때ssllabs-검사기domain1과 함께 domain2 인증서 세부 정보를 얻을 수 있습니다. 여전히 domain1 등급은 A입니다. 다른 모든 확인 사이트에서도 안전합니다.
SSLlabs로 domain2를 확인하면 동일한 서버에 있는 다른 도메인 인증서를 가져옵니다. (그러나 도메인 A,B,C,D가 있는 경우 도메인 SSL 검사 중 하나는 하나의 인증서만 가져옵니다. 이는 문제가 아니며 다른 모든 도메인에는 이 문제가 있습니다.)
스크린샷 첨부. (긴 전체 페이지 스크린샷) 사건이 명확해질 것이라고 생각합니다 :(
**이 문제를 무시하고 컬 요청을 성공시키는 애플리케이션에서는 안전하지 않은 Curl 요청을 사용할 수 없습니다. 누구든지 이것에 대한 아이디어가 있다면 도와주세요. 나는 이것 뒤에 많은 시간을 보냈습니다. 아직도....
위의 문제는 Wordpress 플러그인에 대한 것이므로 컬과 함께 특정 매개변수를 추가할 수 없습니다. (WP 코어에서 가져온 것입니다)
미리 감사드립니다.
답변1
사용 중인 컬 버전에 기본이 누락된 것 같습니다.SNI지원하다. SSL을 사용하는 여러 도메인이 동일한 IP 주소에서 호스팅되는 경우 SNI가 필요합니다.
기본적으로 세 가지 옵션이 있습니다.
- SNI를 지원하는 버전으로 컬을 업데이트하세요.
이에 대한 지원은버전 7.18.1에 도입됨. - 클라이언트에 호스트 매개변수를 직접 추가하세요.
-H "Host: domain1.com"
- 다른 IP 주소를 사용하려면 도메인을 이동하세요. 이렇게 하면 클라이언트를 변경할 필요가 없습니다.