SSL화된 사이트에 API 요청을 던져도 인증서 오류

발생한 사례



클라이언트로부터 「사쿠라 클라우드에서 동작하고 있던 서비스가 바이러스에 감염되어 OS를 클린 인스톨 되어 버리므로 도와 줘」라고 의뢰가 왔다.
조사가 번거로웠던 것과 서비스 자체도 작았기 때문에 OS~어플리케이션까지 풀 풀로 신서버에 신규 인스톨하기로 했다. CakePHP로 움직이고 있는 어플리케이션으로 증명서가 LetsEncrypt로 동작하고 있는 정도 간단한 작업이라고 생각하고 있었다.

문제 발생



하루에 걸쳐 데이터 마이그레이션도 끝나고, 사이트에서의 동작 확인도 끝났지만 20시의 타이밍에 선방의 엔지니어로부터 API를 두드려도 응답이 돌아오지 않으면.

증상


  • 브라우저의 인증서가 제대로 작동하는 것처럼 보입니다.
  • Node 애플리케이션으로부터의 API 통신이 통과하지 않는다
  • Postman 및 WEB 검증 도구에서 API 통신이 통과하지 못함
  • Postman 인증서 인증을 끄면 작동합니다.



  • 검증한 것


  • 로컬 완료 캐시 삭제 (안됨)
  • http 통신 (통행하지만 해결되지는 않음)
  • 중간 인증서 검증
  • $ openssl version
    OpenSSL 1.0.2o  27 Mar 2018
    
    openssl s_client  -connect example.com:443 < /dev/null | grep "Certificate chain" -A 10
    ~~~省略~~~
    verify error:num=21:unable to verify the first certificate
    verify return:1
    DONE
    Certificate chain
     0 s:/C=--/ST=SomeState/L=SomeCity/O=SomeOrganization/OU=SomeOrganizationalUnit/CN=tk2-251-35269.vs.sakura.ne.jp/[email protected]
       i:/C=--/ST=SomeState/L=SomeCity/O=SomeOrganization/OU=SomeOrganizationalUnit/CN=tk2-251-35269.vs.sakura.ne.jp/[email protected]
    ---
    

    인증서 확인에 실패했습니다.

    Apache 설정 재확인


    <VirtualHost *:443>
      SSLEngine on
      SSLProtocol all -SSLv2 -SSLv3
      SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
    
      SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
      # ↓この設定が抜けていた
      # SSLCertificateChainFile /etc/letsencrypt/live/example.com/fullchain.pem
    
      # ~~以下略~~~
    </VirtualHost>
    

    확실히 SSLCertificateChainFile(중간 증명서)의 설정이 빠져 있었다.
    이것으로 화가났다.

    수정하면 API 통신도 대로 무사이행 작업도 완료할 수 있었습니다.
    최근에는 Lets의 증명서도 간단하게 취득할 수 있게 되어 있지만, 역시 어딘지 모르게 움직이고 있는 상태 무서운구나. . .

    좋은 웹페이지 즐겨찾기