cURL을 사용하여 HTTP 요청을 수행하는 동안 SSL 인증서를 확인하는 데 문제가 발생하는 경우가 있습니다. 이는 자체 서명된 서버 인증서를 사용하거나 만료된 경우 발생할 수 있습니다. 이러한 경우 cURL은 가능한 위험으로부터 사용자를 보호하기 위해 기본적으로 연결을 거부합니다. 그러나 이는 API 테스트, 폐쇄된 네트워크에서 작업하거나 로컬 서비스를 사용하는 동안 프로세스를 방해할 수 있습니다. 그렇기 때문에 cURL이 SSL을 무시하는 상황과 이를 구현하는 방법을 알아볼 필요가 있습니다.
이 문서에서는 cURL에서 SSL 인증서를 무시하는 방법, 실행해야 하는 특정 명령어, 보안과 관련된 우려 사항에 대해 자세히 설명합니다.
cURL(클라이언트 URL)은 다양한 프로토콜을 사용하여 데이터를 전송하기 위한 명령줄과 라이브러리를 제공하는 소프트웨어 프로젝트입니다. 이 도구는 다양한 네트워크 유형에서 작동하기 때문에 다양한 웹 리소스에서 요청, API 테스트 또는 정보 검색을 자동화하는 데 매우 유용합니다.
SSL(보안 소켓 계층)은 인터넷을 통한 데이터 전송을 보호하는 암호화 기술의 한 형태입니다. 이 인증서는 특정 웹사이트가 신뢰할 수 있음을 증명하고 사용자와 서버 간의 보안 연결을 설정하는 문서입니다. 자체 서명되었거나 만료되었거나 유효하지 않은 서버 인증서는 cURL 작동 중 차단으로 이어집니다.
이러한 문제를 피하려면 SSL을 비활성화하는 것이 더 좋으므로 cURL 요청을 수행하면 성공률이 높아집니다. 이 테스트 방법은 매우 유용하지만 보안 측면에서는 위험할 수 있습니다.
이 도구의 공식 명칭은 cURL이며, 단어의 첫 글자는 소문자이고 나머지는 대문자입니다. 문서, 문서 및 코드에서 여러 가지 다른 양식을 찾을 수 있습니다:
철자에 관계없이 cURL은 항상 cURL입니다. URL 구문으로 데이터를 전송하기 위한 크로스 플랫폼 및 명령줄 도구입니다. 웹 개발, 시스템 관리 및 DevOps에 종사하는 대부분의 사람들이 HTTP 요청, API 테스트 및 서버 자동화 상호 작용을 수행하는 데 사용합니다.
일반적으로 데이터 전송 유틸리티는 가짜 사이트와 공격을 차단하기 위해 사용자 화면에 표시되는 인증서의 유효성을 검사합니다. 그러나 cURL이 인증서 확인을 무시하는 시나리오가 있습니다. 이러한 경우가 언제 발생하는지 살펴보겠습니다:
확인은 매우 중요한 요소이지만, 이 기능을 완전히 끄면 문제와 위험이 발생할 수 있습니다. 이에 대해서는 다음에 설명하겠습니다.
cURL이 인증서를 무시한다는 것은 다양한 보안 공격을 통해 연결이 악용될 수 있음을 의미하며, 이는 비밀번호, 토큰 또는 결제 데이터와 같은 민감한 정보가 관련된 경우 특히 중요합니다.
주요 위협:
SSL 오류를 무시하는 cURL이 필요한 경우 자체 서명 인증서를 보는 것이 가장 중요합니다:
다음 블록에서는 인증서 확인을 비활성화하기 위해 명령줄에서 수행되는 프로세스를 자세히 분석합니다.
cURL이 SSL을 무시하도록 하려면 인증 확인을 일시 중단하는 특정 매개변수를 포함해야 합니다. 앞서 언급했듯이 이러한 방법은 보안이 적절한 환경 내에서만 사용할 수 있습니다.
잘못된 사이트 인증서 오류를 완화하는 가장 효과적인 방법은 임시 인증 스푸핑을 수동으로 구성하는 것입니다. 다음 매개 변수를 사용하여 이 작업을 수행할 수 있습니다:
다음은 인증서 확인을 무시하는 cURL 호출 예제를 만드는 방법입니다:
curl -k https://example.com
이 옵션을 사용하면 만료된 서버 인증서가 있어도 cURL 호출을 통과할 수 있습니다.
데이터를 전송하려는 경우(예: POST 요청):
curl -k -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "param=value" https://example.com/api
최상의 보안을 위해 파일이 있는 디렉터리를 직접 선택합니다.
curl --cacert /path/to/cert.pem https://example.com
요청이 명령줄을 통해 자동화되고 사용자의 존재 여부가 필요하지 않아야 하는 경우 이러한 시나리오에서는 인증서 확인을 비활성화하는 것이 좋습니다.
이것은 Bash에서 cURL이 SSL을 무시하는 방법의 예시입니다:
#!/bin/bash
URL="https://example.com"
DATA=$(curl -k $URL)
echo "Server response: $DATA"
Python에서는 verify를 False로 설정한 요청 모듈을 사용할 수 있습니다:
import requests
url = "https://example.com"
response = requests.get(url, verify=False)
print(response.text)
이 명령을 실행하면 Python에서 안전하지 않은 연결에 대한 경고를 표시합니다. 또한 사이트에 잘못된 서버 인증서가 있는 경우 발생하는 경고를 비활성화하는 코드를 작성해야 합니다:
import requests import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
url = "https://example.com"
response = requests.get(url, verify=False)
print(response.text)
이제 cURL을 사용하는 PHP에 대해 알아보겠습니다:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
아래 표에는 SSL 검사를 무시하는 가장 일반적인 방법과 사용 방법, 발생 가능한 위험이 나열되어 있습니다.
방법 | 명령/매개변수 | 사용 시기 | 위험 |
---|---|---|---|
SSL 및 호스트 이름 확인을 완전히 비활성화하기 | curl -k / --insecure | 테스트 API, 로컬 서비스 | MITM의 높은 위험 |
사용자 지정 인증서 사용 | curl --cacert /path/to/cert.pem | 자체 인증서가 있는 경우 | 더 안전하지만 설정이 필요합니다 |
코드에서 SSL만 비활성화하기 | CURLOPT_SSL_VERIFYPEER=false | 임시 테스트 | 프로덕션에 남아 있으면 위험 |
오작동하는 서버 인증서는 cURL로 작동할 때보다 더 많은 문제를 일으킵니다. 인증서는 데이터 전송 중 사용자의 안전을 보장합니다. 따라서 확인을 비활성화하는 것은 cURL 디버깅 오류를 발견했을 때 최후의 수단입니다. 오류의 원인에 따라 문서 업데이트, 신뢰할 수 있는 지역에 추가 또는 올바른 지역으로 교체하는 등 덜 극단적인 다른 접근 방식이 있습니다.
SSL 검사를 하지 않으면 연결이 안전하지 않고 다른 사용자에 의해 쉽게 악용될 수 있습니다. 이 접근 방식은 테스트 중이거나 서비스가 외부에 있는 경우와 같이 통제된 환경에서만 허용됩니다. 일반적인 상황에서는 잘못된 서버 인증서가 제공될 경우 데이터 마스킹 및 기타 보안 허점이 발생할 수 있으므로 이 절을 작업 코드에 설정하지 않는 것이 중요합니다.
댓글: 0