cURL -k 와 libcurl의 verifyhost, verifypeer

viram·2022년 11월 21일
0

curl은 무엇인가?

데이터 전송과 관련된 여러 프로토콜을 CLI에서 손쉽게 사용할 수 있게 하는 툴이다. 가장 대표적으로 HTTP프로토콜을 많이 사용한다.

libcurl은 무엇인가?

해당 curl을 어플리케이션 단에서 쉽게 사용할 수 있게 하는 공식 라이브러리다. 이 두 사실을 생각하고 다음을 읽자.

여기 우리가 잘 아는 명령어가 있다.

curl aaa.bbb.com:1234

도메인 aaa.bbb.com으로 1234포트를 통해 통신한다는 이야기이다.

curl -v https://aaa.bbb.com:1234

도메인 aaa.bbb.com으로 1234포트를 통해 통신하되 통신 로그를 보여주고(-v) TLS 인증서를 확인하라는 이야기이다. 여기서 오류가 나면 이런 명령어를 쓰기도 한다.

curl -v -k https://aaa.bbb.com:1234

-k는 --insecure의 약자로 TLS 인증서 확인을 하지 않고 연결한다는 뜻이다. 당연히 권장되지 않는다. k옵션을 쓰지 않고 다른 방법으로 해결하는 것이 바람직하다. 하지만 필요에 따라 써야할 때도 있다. 이 -k라는 옵션을 사용하다가 libcurl에서는 어떻게 쓸 수 있을까 하는 생각에 다음을 정리한다.

libcurl에서 -k는 CURLOPT_SSL_VERIFYPEER를 disable하면 된다.

하지만 libcurl에는 CURLOPT_SSL_VERIFYHOST라는 녀석이 따로 있다. 둘의 차이점을 정리하자면 다음과 같다.

libcurlcurl
CURLOPT_SSL_VERIFYPEER-k상대와 자신의 SSL/TLS 인증서를 검사하지 않는다.
CURLOPT_SSL_VERIFYHOST내가 입력한 주소와 내가 지금 소통하고 있는 상대가 같은지 확인한다.

공식 문서에 따르면, 두 가지는 완전히 독립적으로 작동한다. 그런데 VERIFYHOST는 내가 입력한 주소와 내가 지금 소통하고 있는 상대가 같은지 확인한다. 그렇다면 만약에 처음부터 가르쳐주지 않으면 어떻게 될까?
두 경우 모두 CURLOPT_SSL_VERIFYHOST, VERIFYPEER 옵션을 켜고 실험해보겠다.

SSL: no alternative certificate subject name matches target host name '2**.***.**.****'

그러므로, VERIFYHOST 옵션을 끄거나 주소를 IP가 아닌 도메인으로 입력하면 해결된다.

curl 공식 문서 - CURLOPT_SSL_VERIFYPEER📚
curl 공식 문서 - CURLOPT_SSL_VERIFYHOST📚
curl의 모든 것. libcurl📰

profile
취미로 번역하고 직업으로 개발합니다

0개의 댓글